/**
* Licensed to Apereo under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright ownership. Apereo
* licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use
* this file except in compliance with the License. You may obtain a copy of the License at the
* following location:
*
* <p>http://www.apache.org/licenses/LICENSE-2.0
*
* <p>Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apereo.portal.events.aggr;
import java.util.List;
import org.joda.time.DateTime;
/**
* Calculates the correct {@link AggregationIntervalInfo} that contains the spcified {@link
* DateTime} for the specified {@link AggregationInterval}.
*
*/
public interface AggregationIntervalHelper {
/**
* @param interval {@link AggregationInterval} to get info about
* @param date Date that the interval should contain
* @return Information about the calculated interval, null if the specified interval is not
* currently supported
*/
AggregationIntervalInfo getIntervalInfo(AggregationInterval interval, DateTime date);
/**
* Get the number of intervals between
*
* @param interval
* @param start
* @param end
* @return
*/
int intervalsBetween(AggregationInterval interval, DateTime start, DateTime end);
/** @see #getIntervalStartDateTimesBetween(AggregationInterval, DateTime, DateTime, int) */
List<DateTime> getIntervalStartDateTimesBetween(
AggregationInterval interval, DateTime start, DateTime end);
/**
* Get list of {@link DateTime}s for the start of every interval between the start and end
*
* @param interval The interval to get times for
* @param start The start of the range (inclusive)
* @param end The end of the range (exclusive)
* @param maxTimes Maximum number of DateTime objects to return. If this limit is hit an
* exception is thrown. -1 disables limit checks
* @return List of DateTime objects in chronological order
*/
List<DateTime> getIntervalStartDateTimesBetween(
AggregationInterval interval, DateTime start, DateTime end, int maxTimes);
// /**
// * Fill in any missing timepoints in a list of data with zero-value aggregation
// * objects.
// *
// * @param <T>
// * @param interval {@AggregationInterval} used in aggregation
// * @param start start Date for the interval
// * @param end end Date for the interval
// * @param data List of data to fill in
// * @param missingDataCreator Function used to create zero-value aggregation objects
// * @return
// */
// <T extends BaseAggregation<?>> List<T> fillInBlanks(AggregationInterval interval, DateTime start, DateTime end, List<T> data, Function<AggregationIntervalInfo, T> missingDataCreator);
}