/**
   * @param eventsList
   * @return the fold application value.
   */
  private double performFold(final List<MonitoringEvent> eventsList) {
    final double arr[] = new double[eventsList.size()];

    if (metric != null)
      for (int i = 0; i < arr.length; ++i) arr[i] = (Double) eventsList.get(i).get(metric);

    return foldMethod.perform(arr);
  }
 /**
  * Constructor.
  *
  * @param bean
  */
 private ThresholdRequirement(final ThresholdRequirementBean bean) {
   this.thresholdValue = bean.getThreshold();
   this.metric = bean.getMetric();
   this.pred = ThresholdPredicate.from(bean.getPredicate());
   this.foldMethod =
       bean.getAggregationMethod() != null
           ? ThresholdFold.from(bean.getAggregationMethod())
           : null;
 }
    /**
     * @param method
     * @return a {@link ThresholdFold}.
     * @throws ThresholdRuleValidationError
     */
    static ThresholdFold from(final String method) throws ThresholdRuleValidationError {
      for (final ThresholdFold p : ThresholdFold.values()) if (p.name.equals(method)) return p;

      throw new ThresholdRuleValidationError(
          "invalid rule specification: unsupported aggregation method: " + method);
    }