public List calculateTotal(
      List<BudgetConstructionLevelSummary> bclsList,
      List<BudgetConstructionLevelSummary> simpleList) {

    KualiInteger revenueFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
    KualiInteger revenueAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

    KualiInteger expenditureFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
    KualiInteger expenditureAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

    KualiInteger differenceFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
    KualiInteger differenceAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

    List returnList = new ArrayList();
    for (BudgetConstructionLevelSummary simpleBclsEntry : simpleList) {
      BudgetConstructionOrgLevelSummaryReportTotal bcLevelTotal =
          new BudgetConstructionOrgLevelSummaryReportTotal();
      for (BudgetConstructionLevelSummary bclsListEntry : bclsList) {
        if (BudgetConstructionReportHelper.isSameEntry(
            simpleBclsEntry, bclsListEntry, fieldsForTotal())) {

          if (bclsListEntry.getIncomeExpenseCode().equals("A")) {
            revenueFinancialBeginningBalanceLineAmount =
                revenueFinancialBeginningBalanceLineAmount.add(
                    bclsListEntry.getFinancialBeginningBalanceLineAmount());
            revenueAccountLineAnnualBalanceAmount =
                revenueAccountLineAnnualBalanceAmount.add(
                    bclsListEntry.getAccountLineAnnualBalanceAmount());
          } else {
            expenditureFinancialBeginningBalanceLineAmount =
                expenditureFinancialBeginningBalanceLineAmount.add(
                    bclsListEntry.getFinancialBeginningBalanceLineAmount());
            expenditureAccountLineAnnualBalanceAmount =
                expenditureAccountLineAnnualBalanceAmount.add(
                    bclsListEntry.getAccountLineAnnualBalanceAmount());
          }
        }
      }

      bcLevelTotal.setBcls(simpleBclsEntry);

      bcLevelTotal.setRevenueFinancialBeginningBalanceLineAmount(
          revenueFinancialBeginningBalanceLineAmount);
      bcLevelTotal.setRevenueAccountLineAnnualBalanceAmount(revenueAccountLineAnnualBalanceAmount);

      bcLevelTotal.setExpenditureFinancialBeginningBalanceLineAmount(
          expenditureFinancialBeginningBalanceLineAmount);
      bcLevelTotal.setExpenditureAccountLineAnnualBalanceAmount(
          expenditureAccountLineAnnualBalanceAmount);

      differenceFinancialBeginningBalanceLineAmount =
          revenueFinancialBeginningBalanceLineAmount.subtract(
              expenditureFinancialBeginningBalanceLineAmount);
      differenceAccountLineAnnualBalanceAmount =
          revenueAccountLineAnnualBalanceAmount.subtract(expenditureAccountLineAnnualBalanceAmount);
      bcLevelTotal.setDifferenceFinancialBeginningBalanceLineAmount(
          differenceFinancialBeginningBalanceLineAmount);
      bcLevelTotal.setDifferenceAccountLineAnnualBalanceAmount(
          differenceAccountLineAnnualBalanceAmount);

      returnList.add(bcLevelTotal);

      revenueFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
      revenueAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

      expenditureFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
      expenditureAccountLineAnnualBalanceAmount = KualiInteger.ZERO;

      differenceFinancialBeginningBalanceLineAmount = KualiInteger.ZERO;
      differenceAccountLineAnnualBalanceAmount = KualiInteger.ZERO;
    }
    return returnList;
  }