コード例 #1
0
  protected void fillHeaders(
      byte dimension, HeaderCell[][] headers, int level, int col, CollectedList list, List vals) {
    if (level == buckets[dimension].length) {
      return;
    }

    for (Iterator it = list.iterator(); it.hasNext(); ) {
      CollectedList subList = (CollectedList) it.next();

      vals.add(subList.key);

      int depthSpan = subList.key.isTotal() ? buckets[dimension].length - level : 1;
      Bucket[] values = new Bucket[buckets[dimension].length];
      vals.toArray(values);

      headers[level][col] = new HeaderCell(values, subList.span, depthSpan);

      if (!subList.key.isTotal()) {
        fillHeaders(dimension, headers, level + 1, col, subList, vals);
      }

      col += subList.span;
      vals.remove(vals.size() - 1);
    }
  }
コード例 #2
0
  protected CollectedList createHeadersList(
      byte dimension, BucketMap bucketMap, int level, boolean total) {
    CollectedList headers = new CollectedList();

    for (Iterator it = bucketMap.entryIterator(); it.hasNext(); ) {
      Map.Entry entry = (Map.Entry) it.next();
      Bucket bucketValue = (Bucket) entry.getKey();

      boolean totalBucket = bucketValue.isTotal();
      byte totalPosition = allBuckets[bucketMap.level].getTotalPosition();
      boolean createHeader =
          !totalBucket || total || totalPosition != BucketDefinition.TOTAL_POSITION_NONE;

      if (createHeader) {
        CollectedList nextHeaders;
        if (level + 1 < buckets[dimension].length) {
          BucketMap nextMap = (BucketMap) entry.getValue();
          nextHeaders = createHeadersList(dimension, nextMap, level + 1, total || totalBucket);
        } else {
          nextHeaders = new CollectedList();
          nextHeaders.span = 1;
        }
        nextHeaders.key = bucketValue;

        if (totalBucket) {
          if (totalPosition == BucketDefinition.TOTAL_POSITION_START) {
            headers.addFirst(nextHeaders);
          } else {
            headers.add(nextHeaders);
          }
        } else {
          headers.add(nextHeaders);
        }
      }
    }

    if (headers.span == 0) {
      headers.span = 1;
    }

    return headers;
  }
コード例 #3
0
  protected void fillCells(
      CollectedList[] collectedHeaders,
      BucketMap bucketMap,
      int level,
      int[] pos,
      List vals,
      List bucketMaps) {
    bucketMaps.add(bucketMap);

    byte dimension = level < rowBucketCount ? DIMENSION_ROW : DIMENSION_COLUMN;
    boolean last = level == allBuckets.length - 1;

    CollectedList[] nextCollected = null;
    if (!last) {
      nextCollected = new CollectedList[DIMENSIONS];
      for (int d = 0; d < DIMENSIONS; ++d) {
        if (d != dimension) {
          nextCollected[d] = collectedHeaders[d];
        }
      }
    }

    boolean incrementRow = level == buckets[BucketingService.DIMENSION_ROW].length - 1;

    CollectedList collectedList = collectedHeaders[dimension];

    Iterator bucketIt = bucketMap == null ? null : bucketMap.entryIterator();
    Map.Entry bucketItEntry =
        bucketIt != null && bucketIt.hasNext() ? (Map.Entry) bucketIt.next() : null;
    for (Iterator it = collectedList.iterator(); it.hasNext(); ) {
      CollectedList list = (CollectedList) it.next();

      Map.Entry bucketEntry = null;
      if (list.key.isTotal()) {
        if (bucketMap != null) {
          bucketEntry = bucketMap.getTotalEntry();
        }
      } else {
        if (bucketItEntry != null && bucketItEntry.getKey().equals(list.key)) {
          bucketEntry = bucketItEntry;
          bucketItEntry = bucketIt.hasNext() ? (Map.Entry) bucketIt.next() : null;
        }
      }

      vals.add(list.key);
      if (last) {
        fillCell(pos, vals, bucketMaps, bucketEntry);
      } else {
        nextCollected[dimension] = list;
        BucketMap nextMap = bucketEntry == null ? null : (BucketMap) bucketEntry.getValue();

        fillCells(nextCollected, nextMap, level + 1, pos, vals, bucketMaps);
      }
      vals.remove(vals.size() - 1);

      if (incrementRow) {
        ++pos[0];
        pos[1] = 0;
      }
    }

    bucketMaps.remove(bucketMaps.size() - 1);
  }