private List<AmountInfoType> recurseTree(
      AwardHierarchy branchNode, List<AmountInfoType> amountInfoTypes) {

    Map<String, Object> criteria =
        ServiceHelper.getInstance()
            .buildCriteriaMap(
                new String[] {"parentAwardNumber", "active"},
                new Object[] {branchNode.getAwardNumber(), Boolean.TRUE});
    Collection c =
        businessObjectService.findMatchingOrderBy(
            AwardHierarchy.class, criteria, AwardHierarchy.UNIQUE_IDENTIFIER_FIELD, true);
    branchNode.setChildren(new ArrayList<AwardHierarchy>(c));
    if (branchNode.hasChildren()) {
      for (AwardHierarchy childNode : branchNode.getChildren()) {
        org.kuali.kra.award.home.AwardAmountInfo awardAmount =
            childNode.getAward().getLastAwardAmountInfo();
        amountInfoTypes.add(setAwardAmountInfo(childNode.getAward(), awardAmount));
        childNode.setParent(branchNode);
        childNode.setRoot(branchNode.getRoot());
        recurseTree(childNode, amountInfoTypes);
      }
    }
    return amountInfoTypes;
  }