/**
  * Returns a range representing the extent of the data values in this plot
  * (obtained from the subplots) that will be rendered against the specified
  * axis.  NOTE: This method is intended for internal JFreeChart use, and
  * is public only so that code in the axis classes can call it.  Since
  * only the range axis is shared between subplots, the JFreeChart code
  * will only call this method for the range values (although this is not
  * checked/enforced).
   *
   * @param axis  the axis.
   *
   * @return The range.
   */
  public Range getDataRange(ValueAxis axis) {
      Range result = null;
      if (this.subplots != null) {
          Iterator iterator = this.subplots.iterator();
          while (iterator.hasNext()) {
              CategoryPlot subplot = (CategoryPlot) iterator.next();
              result = Range.combine(result, subplot.getDataRange(axis));
          }
      }
      return result;
  }
 /**
  * Returns the range of the values in this dataset's domain.
  *
  * @param includeInterval a flag that determines whether or not the x-interval is taken into
  *     account.
  * @return The range.
  */
 @Override
 public Range getDomainBounds(boolean includeInterval) {
   boolean interval = includeInterval || this.domainIsPointsInTime;
   Range result = null;
   Range temp = null;
   Iterator iterator = this.data.iterator();
   while (iterator.hasNext()) {
     TimePeriodValues series = (TimePeriodValues) iterator.next();
     int count = series.getItemCount();
     if (count > 0) {
       TimePeriod start = series.getTimePeriod(series.getMinStartIndex());
       TimePeriod end = series.getTimePeriod(series.getMaxEndIndex());
       if (!interval) {
         if (this.xPosition == TimePeriodAnchor.START) {
           TimePeriod maxStart = series.getTimePeriod(series.getMaxStartIndex());
           temp = new Range(start.getStart().getTime(), maxStart.getStart().getTime());
         } else if (this.xPosition == TimePeriodAnchor.MIDDLE) {
           TimePeriod minMiddle = series.getTimePeriod(series.getMinMiddleIndex());
           long s1 = minMiddle.getStart().getTime();
           long e1 = minMiddle.getEnd().getTime();
           TimePeriod maxMiddle = series.getTimePeriod(series.getMaxMiddleIndex());
           long s2 = maxMiddle.getStart().getTime();
           long e2 = maxMiddle.getEnd().getTime();
           temp = new Range(s1 + (e1 - s1) / 2, s2 + (e2 - s2) / 2);
         } else if (this.xPosition == TimePeriodAnchor.END) {
           TimePeriod minEnd = series.getTimePeriod(series.getMinEndIndex());
           temp = new Range(minEnd.getEnd().getTime(), end.getEnd().getTime());
         }
       } else {
         temp = new Range(start.getStart().getTime(), end.getEnd().getTime());
       }
       result = Range.combine(result, temp);
     }
   }
   return result;
 }