protected void addMeasure(
      MeasureDefinition measure, int index, List measuresList, List measureIndexList) {
    switch (measure.getCalculation()) {
      case JRVariable.CALCULATION_AVERAGE:
      case JRVariable.CALCULATION_VARIANCE:
        {
          MeasureDefinition sumMeasure =
              MeasureDefinition.createHelperMeasure(measure, JRVariable.CALCULATION_SUM);
          addMeasure(sumMeasure, index, measuresList, measureIndexList);
          MeasureDefinition countMeasure =
              MeasureDefinition.createHelperMeasure(measure, JRVariable.CALCULATION_COUNT);
          addMeasure(countMeasure, index, measuresList, measureIndexList);
          break;
        }
      case JRVariable.CALCULATION_STANDARD_DEVIATION:
        {
          MeasureDefinition varianceMeasure =
              MeasureDefinition.createHelperMeasure(measure, JRVariable.CALCULATION_VARIANCE);
          addMeasure(varianceMeasure, index, measuresList, measureIndexList);
          break;
        }
      case JRVariable.CALCULATION_DISTINCT_COUNT:
        {
          MeasureDefinition countMeasure =
              MeasureDefinition.createDistinctCountHelperMeasure(measure);
          addMeasure(countMeasure, index, measuresList, measureIndexList);
          break;
        }
    }

    measuresList.add(measure);
    measureIndexList.add(new Integer(index));
  }
  protected MeasureValue[] initMeasureValues() {
    MeasureValue[] values;
    values = new MeasureValue[measures.length];

    for (int i = 0; i < measures.length; ++i) {
      MeasureDefinition measure = measures[i];
      values[i] = measure.new MeasureValue();

      switch (measure.getCalculation()) {
        case JRVariable.CALCULATION_AVERAGE:
        case JRVariable.CALCULATION_VARIANCE:
          {
            values[i].setHelper(values[i - 2], JRCalculable.HELPER_SUM);
            values[i].setHelper(values[i - 1], JRCalculable.HELPER_COUNT);
            break;
          }
        case JRVariable.CALCULATION_STANDARD_DEVIATION:
          {
            values[i].setHelper(values[i - 1], JRCalculable.HELPER_VARIANCE);
          }
        case JRVariable.CALCULATION_DISTINCT_COUNT:
          {
            values[i].setHelper(values[i - 1], JRCalculable.HELPER_COUNT);
          }
      }
    }
    return values;
  }
  protected void addMeasure(
      MeasureDefinition measure,
      int index,
      List<MeasureDefinition> measuresList,
      List<Integer> measureIndexList) {
    switch (measure.getCalculation()) {
      case AVERAGE:
      case VARIANCE:
        {
          MeasureDefinition sumMeasure =
              MeasureDefinition.createHelperMeasure(measure, CalculationEnum.SUM);
          addMeasure(sumMeasure, index, measuresList, measureIndexList);
          MeasureDefinition countMeasure =
              MeasureDefinition.createHelperMeasure(measure, CalculationEnum.COUNT);
          addMeasure(countMeasure, index, measuresList, measureIndexList);
          break;
        }
      case STANDARD_DEVIATION:
        {
          MeasureDefinition varianceMeasure =
              MeasureDefinition.createHelperMeasure(measure, CalculationEnum.VARIANCE);
          addMeasure(varianceMeasure, index, measuresList, measureIndexList);
          break;
        }
      case DISTINCT_COUNT:
        {
          MeasureDefinition countMeasure =
              MeasureDefinition.createDistinctCountHelperMeasure(measure);
          addMeasure(countMeasure, index, measuresList, measureIndexList);
          break;
        }
    }

    measuresList.add(measure);
    measureIndexList.add(Integer.valueOf(index));
  }