class DateTimePeriodDataUtil {

    @SuppressWarnings("unchecked")
    public static <T extends DateTimePeriodData> void fill(Class<T> type, Map<DateTime,T> dataset, List<DateTimePeriod> periods) {
        // loop thru every period, check its it starting time exists in the dataset
        for (DateTimePeriod period : periods) {
            if (dataset.containsKey(period.getStart())) {
                // do nothing
            } else {
                // add a default entry
                try {
                    Constructor ctor = type.getConstructor(DateTimePeriod.class);
                    T data = (T)ctor.newInstance(period);
                    dataset.put(period.getStart(), data);
                } catch (Exception e) {
                    throw new RuntimeException("Failed to create default dataset entry", e);
                }
            }
        }
    }

    private  DateTimePeriodDataUtil();

}