private List buildRows()

in service/src/main/java/org/apache/fineract/cn/reporting/service/internal/specification/CustomerListReportSpecification.java [166:227]


  private List<Row> buildRows(final ReportRequest reportRequest, final 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 = (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 DecimalFormat decimalFormat = new DecimalFormat("0.00");
      final Query accountQuery = this.entityManager.createNativeQuery(this.buildAccountQuery(reportRequest, customerIdentifier));
      final List<?> accountResultList = accountQuery.getResultList();
      final ArrayList<String> values = new ArrayList<>();
      accountResultList.forEach(accountResult -> {
        if (accountResult instanceof Object[]) {
          final Object[] accountResultValues = (Object[]) accountResult;
          final String accountValue = accountResultValues[0].toString() + " (" +
              decimalFormat.format(Double.valueOf(accountResultValues[1].toString())) + ")";
          values.add(accountValue);
        }
      });
      final Value accountValue = new Value();
      accountValue.setValues(values.toArray(new String[values.size()]));
      row.getValues().add(accountValue);

      final String addressQueryString = this.buildAddressQuery(reportRequest, customerIdentifier);
      if (addressQueryString != null) {
        final Query addressQuery = this.entityManager.createNativeQuery(addressQueryString);
        final List<?> resultList = addressQuery.getResultList();
        final Value addressValue = new Value();
        addressValue.setValues(new String[]{resultList.get(0).toString()});
        row.getValues().add(addressValue);
      }

      rows.add(row);
    });

    return rows;
  }