Versão atual:

Filtro de dados com Objetos Java !

Galera, preciso de uma ajuda com filtros, é um gerenciador financeiro de contas bancarias, eu uso arquivos para guardar os objetos serializados ao invés de banco de dados, queria fazer uma espécie de select avançado com where porém com os objetos, e também que todos os filtros trabalhassem juntos, porque individualmente foi facil fazer, ja tentei usando condicional e comparação mas nao deu certo, segue o código galera, estou pensando em fazer varios casos, mas isso vai dar mt código e inumeros casos, queria que o código percorresse todos os filtros e se ele estivesse vazio simplesmente ignorasse, caso contrario incluia-o na condição, são 4 filtros: por periodo ( 2 Caixas de Texto com datas(inicial e final), combobox com todos os favorecidos cadastrados, combobox com todas as categorias cadastradas, um JDialog com 2 tabelas para selecionar as contas e adiciona-las ao arraylist)

int diaini = 0, mesini = 0, anoini = 0, diafim = 0, mesfim = 0, anofim = 0, dia = 0, mes = 0, ano = 0;
        //Set<ContaBancaria> cn = null;
        Favorecido fav = null;
        Categoria cat = null;
        Favorecido favfinal = null;
        Categoria catfinal = null;
        String dfinal;
        DefaultTableModel modelo = (DefaultTableModel) tbrelatorios.getModel();
        modelo.setNumRows(0);

        if ((CTDataInicial.getText().equals("  /  /    ") && (CTDataFinal.getText().equals("  /  /    ")))
                && (CBCategoria.getSelectedIndex() == 0) && (CBFavorecido.getSelectedIndex() == 0)
                && (contselec.isEmpty() == true)) {
            JOptionPane.showMessageDialog(rootPane, "Selecione ao menos um filtro!");
        } else {
            if (!(CTDataInicial.getText().equals("  /  /    ")) && !(CTDataFinal.getText().equals("  /  /    "))) {
                SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                String dataini = CTDataInicial.getText();
                java.util.Date datainic = null;

                try {
                    datainic = format.parse(dataini);
                } catch (ParseException ex) {
                    Logger.getLogger(GUIRelatorioMovimentacao.class.getName()).log(Level.SEVERE, null, ex);
                }
                java.util.Date datafim = null;
                String datafimn = CTDataFinal.getText();
                try {
                    datafim = format.parse(datafimn);
                } catch (ParseException ex) {
                    Logger.getLogger(GUIRelatorioMovimentacao.class.getName()).log(Level.SEVERE, null, ex);
                }
                Calendar cli = new GregorianCalendar();
                cli.setTime(datainic);
                diaini = cli.get(Calendar.DAY_OF_MONTH);
                mesini = cli.get(Calendar.MONTH) + 1;
                anoini = cli.get(Calendar.YEAR);

                Calendar clf = new GregorianCalendar();
                clf.setTime(datafim);
                diafim = clf.get(Calendar.DAY_OF_MONTH);
                mesfim = clf.get(Calendar.MONTH) + 1;
                anofim = clf.get(Calendar.YEAR);

            } else if (!(CTDataInicial.getText().equals("  /  /    "))
                    && (CTDataFinal.getText().equals("  /  /    "))) {

                SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                String dataini = CTDataInicial.getText();
                java.util.Date datainic = null;

                try {
                    datainic = format.parse(dataini);
                } catch (ParseException ex) {
                    Logger.getLogger(GUIRelatorioMovimentacao.class.getName()).log(Level.SEVERE, null, ex);
                }

                Calendar cli = new GregorianCalendar();
                cli.setTime(datainic);
                diaini = cli.get(Calendar.DAY_OF_MONTH);
                mesini = cli.get(Calendar.MONTH) + 1;
                anoini = cli.get(Calendar.YEAR);

                // seta um valor bem alto para tudo ser menor que aquela data final (pois o usuario nao estipulou)
                String x = "31/12/2050";
                java.util.Date fm = null;
                try {
                    fm = format.parse(x);
                } catch (ParseException ex) {
                    Logger.getLogger(GUIRelatorioMovimentacao.class.getName()).log(Level.SEVERE, null, ex);
                }
                Calendar cf = new GregorianCalendar();
                cf.setTime(fm);

                diafim = cf.get(Calendar.DAY_OF_MONTH);
                mesfim = cf.get(Calendar.MONTH) + 1;
                anofim = cf.get(Calendar.YEAR);

            } else if ((CTDataInicial.getText().equals("  /  /    ")) && !(CTDataFinal.getText().equals("  /  /    "))) {

                SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");

                java.util.Date dataini = null;
                String datainic = "01/01/2000";
                try {
                    dataini = format.parse(datainic);
                } catch (ParseException ex) {
                    Logger.getLogger(GUIRelatorioMovimentacao.class.getName()).log(Level.SEVERE, null, ex);
                }

                Calendar cli = new GregorianCalendar();
                cli.setTime(dataini);
                diaini = cli.get(Calendar.DAY_OF_MONTH);
                mesini = cli.get(Calendar.MONTH) + 1;
                anoini = cli.get(Calendar.YEAR);

                java.util.Date datafim = null;
                String datafimn = CTDataFinal.getText();
                try {
                    datafim = format.parse(datafimn);
                } catch (ParseException ex) {
                    Logger.getLogger(GUIRelatorioMovimentacao.class.getName()).log(Level.SEVERE, null, ex);
                }

                Calendar clf = new GregorianCalendar();
                clf.setTime(datafim);
                diafim = clf.get(Calendar.DAY_OF_MONTH);
                mesfim = clf.get(Calendar.MONTH) + 1;
                anofim = clf.get(Calendar.YEAR);

            } else if (CBCategoria.getSelectedIndex() != 0) { // a minha primeira linha do combo é a "selecione uma categoria"
                int selectedIndex = CBCategoria.getSelectedIndex();
                cat = cats.get(selectedIndex - 1);
            } else if (CBFavorecido.getSelectedIndex() != 0) { // mesmo caso da categoria
                int selectedIndex = CBFavorecido.getSelectedIndex();
                fav = favs.get(selectedIndex - 1);
            } else if (contselec.isEmpty() == false) { // utilizo uma tela para selecionar as contas e as selecionadas estão neste arraylist
                for (ContaBancaria cb : contselec) {
                    Set<Movimentacao> movimentacao = cb.getMovimentacao();
                    for (Movimentacao m : movimentacao) {
                        if (cat != null) {
                            if (m.getCategoria() == cat) {
                                catfinal = cat;
                            }
                            if (fav != null) {
                                if (m.getFavorecido() == fav) {
                                    favfinal = fav;
                                }
                                if ((((diaini <= dia) && (dia <= diafim)) && ((mesini <= mes) && (mes <= mesfim))
                                        && ((anoini <= ano) && (ano <= anofim)))) {

                                    dfinal = dia + "/" + mes + "/" + ano;

                                    Banco banco = cb.getBanco();
                                    TipoContaBancaria tipoconta = cb.getTipoconta();
                                    String bnc = banco.getNome() + "- Nº: " + banco.getCodigo();

                                    modelo.addRow(new String[]{bnc, cb.getNomeIdentificador(), dfinal, catfinal.getNome(), favfinal.getNome(), tipoconta.toString(), "" + m.getValor()});

                                }

                            }
}
}
}
}
}

Versões(2):

Ver a versão formatada

Filtro de dados com Objetos Java !

Comentário

new question