Java tutorial
/*** 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; } }