public void init() {
    System.out.println("Getting child list");
    childList = new ArrayList<>();
    // return ejbFacade.getEntityManager().createNamedQuery("Child.findAllSorted").getResultList();
    String queryString =
        "SELECT e FROM Child e " + buildWhereClause() + " ORDER BY e.surname ASC, e.firstname ASC";

    List<Child> lc = ejbFacade.getEntityManager().createQuery(queryString).getResultList();
    for (Child c : lc) {
      boolean add = false;
      if (searchKS1 != true || searchKS2 != true || searchKS3 != true || searchKS4 != true) {
        // Check year.
        int childYear = settings.getSchoolYearFor(c, 0);
        if ((searchKS1 && childYear >= 0 && childYear <= 2)
            || (searchKS2 && childYear >= 3 && childYear <= 6)
            || (searchKS3 && childYear >= 7 && childYear <= 9)
            || (searchKS4 && childYear >= 10 && childYear <= 11)) {
          add = true;
        }
      } else {
        add = true;
      }
      if (add && c.getExtraItems() != null && c.getExtraItems().size() > 0) {
        // Create a child container for each one.
        childList.add(new ChildContainer(c));
      }
    }
  }
 public ChildContainer(Child child) {
   this.child = child;
   tickets = new ArrayList<>();
   List<ExtraItemEntry> extras = child.getExtraItems();
   int size = extras.size();
   List<String> rowEntries = new ArrayList<>();
   for (int i = 0; i < size; ++i) {
     int itemCount = extras.get(i).getItemCount();
     for (int j = 0; j < itemCount; ++j) {
       rowEntries.add(extras.get(i).getItem().getName());
     }
   }
   size = rowEntries.size();
   for (int i = 0; i < size; i += 3) {
     List<String> row = new ArrayList<>();
     for (int j = 0; j < 3; ++j) {
       if (i + j < size) {
         row.add(rowEntries.get(i + j));
       } else {
         row.add(null);
       }
     }
     tickets.add(new TicketRow(row));
   }
 }