예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #5
0
 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);