private List buildRows()

in service/src/main/java/org/apache/fineract/cn/reporting/service/internal/specification/LoanListReportSpecification.java [180:267]


    private List<Row> buildRows(ReportRequest reportRequest, List<?> customerResultList) {
        final ArrayList<Row> rows = new ArrayList<>();

        customerResultList.forEach(result -> {
            final Row row = new Row();
            row.setValues(new ArrayList<>());

            final String customerIdentifier;

            if (result instanceof Object[]) {
                final Object[] resultValues;
                resultValues = (Object[]) result;

                customerIdentifier = resultValues[0].toString();

                for (final Object resultValue : resultValues) {
                    final Value value = new Value();
                    if (resultValue != null) {
                        value.setValues(new String[]{resultValue.toString()});
                    } else {
                        value.setValues(new String[]{});
                    }

                    row.getValues().add(value);
                }
            } else {
                customerIdentifier = result.toString();

                final Value value = new Value();
                value.setValues(new String[]{result.toString()});
                row.getValues().add(value);
            }

            final Query accountQuery = this.entityManager.createNativeQuery(this.buildLoanAccountQuery(reportRequest, customerIdentifier));
            final List<?> accountResultList = accountQuery.getResultList();

            accountResultList.forEach(accountResult -> {

                final String caseIdentifier;

                if (accountResult instanceof Object[]) {
                    final Object[] accountResultValues;
                    accountResultValues = (Object[]) accountResult;

                    caseIdentifier = accountResultValues[0].toString();

                    for (final Object loan: accountResultValues) {
                        final Value value = new Value();
                        if (loan != null) {
                            value.setValues(new String[]{loan.toString()});
                        } else {
                            value.setValues(new String[]{});
                        }

                        row.getValues().add(value);
                    }
                }else {
                    caseIdentifier = accountResult.toString();

                    final Value value = new Value();
                    value.setValues(new String[]{accountResult.toString()});
                    row.getValues().add(value);
                }

                final Query caseQuery = this.entityManager.createNativeQuery(this.buildCaseQuery(reportRequest, caseIdentifier));

                final List<?> caseResultList = caseQuery.getResultList();

                caseResultList.forEach(loanCase -> {
                    final Object[] loanCaseResultValues = (Object[]) loanCase;

                    for (final Object loan : loanCaseResultValues) {
                        final Value value = new Value();
                        if (loan != null) {
                            value.setValues(new String[]{loan.toString()});
                        } else {
                            value.setValues(new String[]{});
                        }
                        row.getValues().add(value);
                    }
                });
            });

            rows.add(row);
        });

        return rows;
    }