/// <summary> /// Builds a dimension representing Years in the given range. This method limits the years individual ends, e.g. 1.1. - 1.3. /// This makes part of years comparable. /// </summary> /// <param name="parent"></param> /// <param name="fromYear"></param> /// <param name="thruYear"></param> /// <param name="sliceFromMonth"></param> /// <param name="sliceFromDay"></param> /// <param name="sliceThruMonth"></param> /// <param name="sliceThruDay"></param> /// <returns></returns> public static List <DimensionEntry <DateTime> > BuildYearSlice(this DimensionEntry <DateTime> parent, int fromYear, int thruYear, int sliceFromMonth = 1, int?sliceFromDay = null, int sliceThruMonth = 1, int?sliceThruDay = null) { if (parent == null) { throw new ArgumentNullException(nameof(parent)); } for (int year = fromYear; year <= thruYear; year++) { parent.AddChild(year.ToStringInvariant(), new DateTime(year, sliceFromMonth, sliceFromDay ?? 1), new DateTime(year, sliceThruMonth, sliceThruDay ?? DateTime.DaysInMonth(year, sliceThruMonth))); } return(parent.Children); }
/// <summary> /// Builds a dimension representing Years /// </summary> /// <param name="parent"></param> /// <param name="fromYear"></param> /// <param name="thruYear"></param> /// <returns></returns> public static List <DimensionEntry <DateTime> > BuildYear(this DimensionEntry <DateTime> parent, int fromYear, int thruYear) { if (parent == null) { throw new ArgumentNullException(nameof(parent)); } for (int year = fromYear; year <= thruYear; year++) { parent.AddChild(year.ToStringInvariant(), new DateTime(year, 1, 1), new DateTime(year, 12, 31)); } return(parent.Children); }
/// <summary> /// Builds a enumeration dimension from the given Enum Type. /// </summary> /// <typeparam name="TEnum"></typeparam> /// <param name="parent"></param> /// <remarks>As enum is non-nullable type then min and max are set to the same as value</remarks> /// <returns></returns> public static List <DimensionEntry <TEnum> > BuildEnum <TEnum>(this DimensionEntry <TEnum> parent) where TEnum : struct, IComparable, IConvertible, IFormattable { if (parent == null) { throw new ArgumentNullException(nameof(parent)); } if (!typeof(TEnum).IsEnum) { throw new InvalidOperationException("TEnum is not an enumeration."); } foreach (var value in Enum.GetValues(typeof(TEnum)).Cast <TEnum>()) { parent.AddChild(value.ToStringInvariant(), value); } return(parent.Children); }
/// <summary> /// Builds a simple string bases enumeration dimension /// </summary> /// <param name="parent"></param> /// <param name="entries"></param> /// <returns></returns> public static List <DimensionEntry <string> > BuildEnum(this DimensionEntry <string> parent, params string[] entries) { if (parent == null) { throw new ArgumentNullException(nameof(parent)); } if (entries == null) { throw new ArgumentNullException(nameof(entries)); } foreach (var entry in entries) { if (parent.Children.Any(x => x.Value == entry)) { throw new ArgumentException("Entries should be unique.", nameof(entries)); } parent.AddChild(entry, entry); } return(parent.Children); }
private static DimensionEntry <bool> AddBoolChild(this DimensionEntry <bool> parent, bool value) => parent.AddChild(value.ToStringInvariant(), value);
private static void AddChildHelper <T>(this DimensionEntry <T> parent, T from, T to, string labelFormat) where T : IComparable => parent.AddChild(labelFormat.FormatInvariant(from, to), from, to);