br.com.hslife.orcamento.controller.RelatorioCustomizadoController.java Source code

Java tutorial

Introduction

Here is the source code for br.com.hslife.orcamento.controller.RelatorioCustomizadoController.java

Source

/***
      
 Copyright (c) 2012 - 2020 Hrcules S. S. Jos
    
Este arquivo  parte do programa Oramento Domstico.
    
    
Oramento Domstico  um software livre; voc pode redistribui-lo e/ou 
    
modific-lo dentro dos termos da Licena Pblica Geral Menor GNU como 
    
publicada pela Fundao do Software Livre (FSF); na verso 2.1 da 
    
Licena.
    
    
Este programa  distribudo na esperana que possa ser til, 
    
mas SEM NENHUMA GARANTIA; sem uma garantia implcita de ADEQUAO a 
    
qualquer MERCADO ou APLICAO EM PARTICULAR. Veja a Licena Pblica 
    
Geral Menor GNU em portugus para maiores detalhes.
    
    
Voc deve ter recebido uma cpia da Licena Pblica Geral Menor GNU sob o 
    
nome de "LICENSE.TXT" junto com este programa, se no, acesse o site do
    
projeto no endereco https://github.com/herculeshssj/orcamento ou escreva 
    
para a Fundao do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, 
    
Boston, MA  02110-1301, USA.
    
    
Para mais informaes sobre o programa Oramento Domstico e seu autor entre  
    
em contato pelo e-mail herculeshssj@outlook.com, ou ainda escreva para 
    
Hrcules S. S. Jos, Av. Ministro Lafaeyte de Andrade, 1683 - Bl. 3 Apt 404, 
    
Marco II - Nova Iguau, RJ, Brasil.
      
***/

package br.com.hslife.orcamento.controller;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.faces.component.html.HtmlPanelGroup;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.com.hslife.orcamento.entity.RelatorioColuna;
import br.com.hslife.orcamento.entity.RelatorioCustomizado;
import br.com.hslife.orcamento.entity.RelatorioParametro;
import br.com.hslife.orcamento.exception.BusinessException;
import br.com.hslife.orcamento.exception.ValidationException;
import br.com.hslife.orcamento.facade.IRelatorioCustomizado;
import br.com.hslife.orcamento.util.RelatorioColunaComparator;
import br.com.hslife.orcamento.util.RelatorioCustomizadoUtil;

@Component("relatorioCustomizadoMB")
@Scope("session")
public class RelatorioCustomizadoController extends AbstractCRUDController<RelatorioCustomizado> {

    /**
     * 
     */
    private static final long serialVersionUID = 5508989331062227746L;

    @Autowired
    private IRelatorioCustomizado service;

    private String nomeRelatorio;

    private RelatorioColuna colunaRelatorio = new RelatorioColuna();
    private RelatorioColuna colunaRelatorioTemp; // usado na mudana de ordem das colunas
    private RelatorioParametro parametroRelatorio = new RelatorioParametro();
    private RelatorioParametro parametroRelatorioTemp; // usado para excluso de parmentros da listagem 

    // Map que guarda os valores informados nos parmetros de busca
    private Map<String, Object> parameterValues = new HashMap<>();

    // List de Map que guarda o resultado de consulta
    List<Map<String, Object>> queryResult = new LinkedList<>();

    public RelatorioCustomizadoController() {
        super(new RelatorioCustomizado());
        moduleTitle = "Relatrios Customizados";
    }

    @Override
    protected void initializeEntity() {
        entity = new RelatorioCustomizado();
        listEntity = new ArrayList<RelatorioCustomizado>();

        colunaRelatorio = new RelatorioColuna();
        colunaRelatorioTemp = new RelatorioColuna();
        parametroRelatorio = new RelatorioParametro();
        parametroRelatorioTemp = new RelatorioParametro();
    }

    @Override
    public void find() {
        try {
            listEntity = getService().buscarNomePorUsuario(nomeRelatorio, getUsuarioLogado());
        } catch (ValidationException | BusinessException be) {
            errorMessage(be.getMessage());
        }
    }

    @Override
    public String save() {
        entity.setUsuario(getUsuarioLogado());
        return super.save();
    }

    @Override
    public String edit() {
        String retorno = super.edit();

        // Ordena as colunas da consulta
        List<RelatorioColuna> listaColunas = new LinkedList<RelatorioColuna>();
        listaColunas.addAll(entity.getColunasRelatorio());
        Collections.sort(listaColunas, new RelatorioColunaComparator());
        entity.getColunasRelatorio().clear();
        entity.getColunasRelatorio().addAll(listaColunas);

        return retorno;
    }

    public String gerarRelatorioView() {
        try {
            entity = getService().buscarPorID(idEntity);

            // Inicializa o Map dos valores dos parmetros
            if (entity.getParametrosRelatorio() != null && !entity.getParametrosRelatorio().isEmpty()) {
                for (RelatorioParametro parametro : entity.getParametrosRelatorio()) {
                    parameterValues.put(parametro.getNomeParametro(), null);
                }
            }

            actionTitle = " - " + entity.getNome();
            return "/pages/RelatorioCustomizado/gerarRelatorio";
        } catch (ValidationException | BusinessException be) {
            errorMessage(be.getMessage());
        }
        return "";
    }

    public String gerarRelatorio() {
        // Valida a entrada dos parmetros
        if (entity.getParametrosRelatorio() != null && !entity.getParametrosRelatorio().isEmpty()) {
            for (String key : parameterValues.keySet()) {
                if (parameterValues.get(key) == null) {
                    warnMessage("Todos os parmetros devem ser informados!");
                    return "";
                }
                if (parameterValues.get(key) != null && parameterValues.get(key) instanceof String
                        && ((String) parameterValues.get(key)).isEmpty()) {
                    warnMessage("Todos os parmetros devem ser informados!");
                    return "";
                }
            }
        }

        try {
            actionTitle = " - " + entity.getNome() + " [Resultado]";

            // Processa o relatrio customizado passando os valores informados para os parmetros
            queryResult = getService().processarRelatorioCustomizado(entity, parameterValues);

        } catch (ValidationException | BusinessException be) {
            errorMessage(be.getMessage());
        }

        return "/pages/RelatorioCustomizado/visualizarRelatorio";
    }

    public HtmlPanelGroup getCriteriaComponents() {
        return RelatorioCustomizadoUtil.getGeneratedComponentsToCriteriaPage(entity);
    }

    public void setCriteriaComponents(HtmlPanelGroup panelGroup) {
        // Faz nada. Mtodo criado por causa do JSF lifecycle que tenta gravar no 
        // atributo criteriaComponents
    }

    public HtmlPanelGroup getResultComponents() {
        return RelatorioCustomizadoUtil.getGeneratedComponentsToResultPage(entity);
    }

    public void setResultComponents(HtmlPanelGroup panelGroup) {
        // Faz nada. Mtodo criado por causa do JSF lifecycle que tenta gravar no 
        // atributo resultComponents
    }

    public void adicionarColuna() {
        colunaRelatorio.setOrdem(entity.getColunasRelatorio().size() + 1);
        entity.getColunasRelatorio().add(colunaRelatorio);
        colunaRelatorio = new RelatorioColuna();
    }

    public void removerColuna() {
        // Remove o item selecionado
        for (Iterator<RelatorioColuna> iterator = entity.getColunasRelatorio().iterator(); iterator.hasNext();) {
            RelatorioColuna item = iterator.next();
            if (item.getOrdem() == colunaRelatorioTemp.getOrdem()) {
                iterator.remove();
            }
        }

        // Renumera a numerao da ordem das colunas
        int i = 1;
        for (RelatorioColuna coluna : entity.getColunasRelatorio()) {
            coluna.setOrdem(i);
            i++;
        }
    }

    public void subirNivel() {
        // Adiciona o contedo do Set de colunas na lista temporria
        List<RelatorioColuna> listaColunas = new LinkedList<RelatorioColuna>();
        listaColunas.addAll(entity.getColunasRelatorio());

        // Variveis auxiliares para guardar do ndice
        int indiceAtual = 0;
        int indiceAnterior = 0;

        // Varre a lista a procura do elemento selecionado
        for (int i = 0; i < listaColunas.size(); i++) {
            if (listaColunas.get(i).equals(colunaRelatorioTemp)) {
                indiceAtual = i;
                indiceAnterior = indiceAtual - 1;
                break;
            }
        }

        // Realiza o swap dos elementos da lista caso indice anterior ser
        // igual ou maior que zero
        if (indiceAnterior >= 0) {
            Collections.swap(listaColunas, indiceAtual, indiceAnterior);
        }

        // Limpa o Set da entidade e adiciona o contedo da lista
        entity.getColunasRelatorio().clear();
        entity.getColunasRelatorio().addAll(listaColunas);

        // Renumera a numerao da ordem das colunas
        int i = 1;
        for (RelatorioColuna coluna : entity.getColunasRelatorio()) {
            coluna.setOrdem(i);
            i++;
        }
    }

    public void descerNivel() {
        // Adiciona o contedo do Set de colunas na lista temporria
        List<RelatorioColuna> listaColunas = new LinkedList<RelatorioColuna>();
        listaColunas.addAll(entity.getColunasRelatorio());

        // Variveis auxiliares para guardar do ndice
        int indiceAtual = 0;
        int indicePosterior = 0;

        // Varre a lista a procura do elemento selecionado
        for (int i = 0; i < listaColunas.size(); i++) {
            if (listaColunas.get(i).equals(colunaRelatorioTemp)) {
                indiceAtual = i;
                indicePosterior = indiceAtual + 1;
                break;
            }
        }

        // Realiza o swap dos elementos da lista caso indice anterior ser
        // igual ou maior que zero
        if (indicePosterior < listaColunas.size()) {
            Collections.swap(listaColunas, indiceAtual, indicePosterior);
        }

        // Limpa o Set da entidade e adiciona o contedo da lista
        entity.getColunasRelatorio().clear();
        entity.getColunasRelatorio().addAll(listaColunas);

        // Renumera a numerao da ordem das colunas
        int i = 1;
        for (RelatorioColuna coluna : entity.getColunasRelatorio()) {
            coluna.setOrdem(i);
            i++;
        }
    }

    public void atualizarFormColunas() {
        // Mtodo criado para poder setar os valores digitados no momento
        // da seleo do checkbox "Formatar".
        this.getColunaRelatorio();
    }

    public void adicionarParametro() {
        entity.getParametrosRelatorio().add(parametroRelatorio);
        parametroRelatorio = new RelatorioParametro();
    }

    public void removerParametro() {
        // Remove o item selecionado
        for (Iterator<RelatorioParametro> iterator = entity.getParametrosRelatorio().iterator(); iterator
                .hasNext();) {
            RelatorioParametro item = iterator.next();
            if (item.getNomeParametro().equals(parametroRelatorioTemp.getNomeParametro())) {
                iterator.remove();
            }
        }
    }

    public Integer getTotalRegistros() {
        if (queryResult != null && !queryResult.isEmpty()) {
            return queryResult.size();
        }
        return 0;
    }

    public String getNomeRelatorio() {
        return nomeRelatorio;
    }

    public void setNomeRelatorio(String nomeRelatorio) {
        this.nomeRelatorio = nomeRelatorio;
    }

    public IRelatorioCustomizado getService() {
        return service;
    }

    public RelatorioColuna getColunaRelatorio() {
        return colunaRelatorio;
    }

    public void setColunaRelatorio(RelatorioColuna colunaRelatorio) {
        this.colunaRelatorio = colunaRelatorio;
    }

    public RelatorioParametro getParametroRelatorio() {
        return parametroRelatorio;
    }

    public void setParametroRelatorio(RelatorioParametro parametroRelatorio) {
        this.parametroRelatorio = parametroRelatorio;
    }

    public RelatorioColuna getColunaRelatorioTemp() {
        return colunaRelatorioTemp;
    }

    public void setColunaRelatorioTemp(RelatorioColuna colunaRelatorioTemp) {
        this.colunaRelatorioTemp = colunaRelatorioTemp;
    }

    public RelatorioParametro getParametroRelatorioTemp() {
        return parametroRelatorioTemp;
    }

    public void setParametroRelatorioTemp(RelatorioParametro parametroRelatorioTemp) {
        this.parametroRelatorioTemp = parametroRelatorioTemp;
    }

    public Map<String, Object> getParameterValues() {
        return parameterValues;
    }

    public void setParameterValues(Map<String, Object> parameterValues) {
        this.parameterValues = parameterValues;
    }

    public List<Map<String, Object>> getQueryResult() {
        return queryResult;
    }

    public void setQueryResult(List<Map<String, Object>> queryResult) {
        this.queryResult = queryResult;
    }
}