private void collectAlignableElements(
      final Section section, final List<Element> collectedElements) {
    if (section instanceof CrosstabGroup) {
      return;
    }

    final int theElementCount = section.getElementCount();
    for (int i = 0; i < theElementCount; i++) {
      final ReportElement reportElement = section.getElement(i);
      if (reportElement instanceof Section) {
        collectAlignableElements((Section) reportElement, collectedElements);
      }

      final CachedLayoutData cachedLayoutData =
          ModelUtility.getCachedLayoutData((Element) reportElement);
      final long layoutAge = cachedLayoutData.getLayoutAge();
      if (layoutAge != -1) {
        if (reportElement instanceof RootLevelBand) {
          continue;
        }

        if (reportElement instanceof Band || reportElement instanceof Section == false) {
          collectedElements.add((Element) reportElement);
        }
      }
    }
  }
  public void traverseSection(final Section section) {
    final int count = section.getElementCount();
    for (int i = 0; i < count; i++) {
      final ReportElement element = section.getElement(i);
      if (element instanceof SubReport) {
        inspect((SubReport) element);
      } else if (element instanceof Section) {
        inspectElement(element);
        traverseSection((Section) element);

        if (element instanceof RootLevelBand) {
          final RootLevelBand rlb = (RootLevelBand) element;
          for (int sr = 0; sr < rlb.getSubReportCount(); sr += 1) {
            inspect(rlb.getSubReport(sr));
          }
        }
      } else {
        inspectElement(element);
      }
    }
  }