/// <summary>
        /// Load data into the WebTimeStepSpeciesObservationCount instance.
        /// </summary>
        /// <param name="timeStepSpeciesObservationCount"> Information on time step specific species observation counts.</param>
        /// <param name="uniqueValue"></param>
        /// <param name="periodicity"></param>
        /// <param name="culture"></param>
        public static void LoadData(this WebTimeStepSpeciesObservationCount timeStepSpeciesObservationCount,
                                    KeyValuePair <string, long> uniqueValue,
                                    Periodicity periodicity,
                                    CultureInfo culture)
        {
            if (timeStepSpeciesObservationCount != null)
            {
                timeStepSpeciesObservationCount.Count           = uniqueValue.Value;
                timeStepSpeciesObservationCount.Periodicity     = periodicity;
                timeStepSpeciesObservationCount.IsDateSpecified = false;
                timeStepSpeciesObservationCount.Name            = uniqueValue.Key;

                //Special cases
                switch (periodicity)
                {
                case Periodicity.Monthly:
                    var year  = int.Parse(uniqueValue.Key.Split('-')[0]);
                    var month = int.Parse(uniqueValue.Key.Split('-')[1]);

                    timeStepSpeciesObservationCount.Date            = new DateTime(year, month, 1);
                    timeStepSpeciesObservationCount.IsDateSpecified = true;
                    timeStepSpeciesObservationCount.Name            = string.Format("{0} {1}", year, culture.DateTimeFormat.GetMonthName(month).Substring(0, 3));
                    break;

                case Periodicity.Weekly:
                    year = int.Parse(uniqueValue.Key.Split('-')[0]);
                    var week = int.Parse(uniqueValue.Key.Split('-')[1]);

                    timeStepSpeciesObservationCount.Date            = GetFirstDateOfWeek(year, week);
                    timeStepSpeciesObservationCount.IsDateSpecified = true;
                    timeStepSpeciesObservationCount.Name            = string.Format("{0}:{1}", year, week);
                    break;

                case Periodicity.Daily:
                    year  = int.Parse(uniqueValue.Key.Split('-')[0]);
                    month = int.Parse(uniqueValue.Key.Split('-')[1]);
                    var day = int.Parse(uniqueValue.Key.Split('-')[2]);

                    timeStepSpeciesObservationCount.Date            = new DateTime(year, month, day);
                    timeStepSpeciesObservationCount.IsDateSpecified = true;
                    timeStepSpeciesObservationCount.Name            = timeStepSpeciesObservationCount.Date.ToString("d", culture.DateTimeFormat);
                    break;
                }
            }
        }
        /// <summary>
        /// Load data into the WebTimeStepSpeciesObservationCount instance.
        /// </summary>
        /// <param name="timeStepSpeciesObservationCount"> Information on time step specific species observation counts.</param>
        /// <param name='dataReader'>An open data reader.</param>
        /// <param name="culture"></param>
        public static void LoadData(this WebTimeStepSpeciesObservationCount timeStepSpeciesObservationCount,
                                    DataReader dataReader, CultureInfo culture)
        {
            if (timeStepSpeciesObservationCount != null && dataReader != null)
            {
                Int32 day, month, week, year;
                bool  isDaySpecified, isMonthSpecified, isWeekSpecified, isYearSpecified;

                //Retrieving time step specific information from data reader.
                timeStepSpeciesObservationCount.Count = Convert.ToInt64(dataReader.GetInt32(TimeSpeciesObservationCountData.SPECIES_OBSERVATION_COUNT));
                day              = dataReader.GetInt32(TimeSpeciesObservationCountData.DAY);
                isDaySpecified   = (day > 0);
                week             = dataReader.GetInt32(TimeSpeciesObservationCountData.WEEK);
                isWeekSpecified  = (week > 0);
                month            = dataReader.GetInt32(TimeSpeciesObservationCountData.MONTH);
                isMonthSpecified = (month > 0);
                year             = dataReader.GetInt32(TimeSpeciesObservationCountData.YEAR);
                isYearSpecified  = (year > 0);

                //Estimating type and name
                if (isYearSpecified &&
                    !isMonthSpecified &&
                    !isWeekSpecified &&
                    !isDaySpecified)
                {
                    timeStepSpeciesObservationCount.Periodicity     = Periodicity.Yearly;
                    timeStepSpeciesObservationCount.IsDateSpecified = false;
                    timeStepSpeciesObservationCount.Name            = year.ToString(CultureInfo.InvariantCulture);
                }

                if (isYearSpecified &&
                    isMonthSpecified &&
                    !isWeekSpecified &&
                    !isDaySpecified)
                {
                    timeStepSpeciesObservationCount.Periodicity = Periodicity.Monthly;
                    DateTime date = new DateTime(year, month, 1);
                    timeStepSpeciesObservationCount.Date            = date;
                    timeStepSpeciesObservationCount.IsDateSpecified = true;
                    if (culture.IsNotNull())
                    {
                        String monthName = culture.DateTimeFormat.GetMonthName(month);
                        monthName = monthName.Substring(0, 3);
                        monthName = year + " " + monthName;

                        timeStepSpeciesObservationCount.Name = monthName;
                    }
                }

                if (isYearSpecified &&
                    !isMonthSpecified &&
                    isWeekSpecified &&
                    !isDaySpecified)
                {
                    timeStepSpeciesObservationCount.Periodicity = Periodicity.Weekly;
                    DateTime date = GetFirstDateOfWeek(year, week);
                    timeStepSpeciesObservationCount.Date            = date;
                    timeStepSpeciesObservationCount.IsDateSpecified = true;
                    timeStepSpeciesObservationCount.Name            = year + ":" + week;
                }

                if (isYearSpecified &&
                    isMonthSpecified &&
                    isDaySpecified)
                {
                    timeStepSpeciesObservationCount.Periodicity = Periodicity.Daily;
                    DateTime date = new DateTime(year, month, day);
                    timeStepSpeciesObservationCount.Date            = date;
                    timeStepSpeciesObservationCount.IsDateSpecified = true;
                    timeStepSpeciesObservationCount.Name            = date.ToString("d", culture.DateTimeFormat);
                }

                if (!isYearSpecified &&
                    isMonthSpecified &&
                    !isWeekSpecified &&
                    !isDaySpecified)
                {
                    timeStepSpeciesObservationCount.Periodicity     = Periodicity.MonthOfTheYear;
                    timeStepSpeciesObservationCount.IsDateSpecified = false;
                    timeStepSpeciesObservationCount.Name            = month.ToString(CultureInfo.InvariantCulture);
                }

                if (!isYearSpecified &&
                    !isMonthSpecified &&
                    isWeekSpecified &&
                    !isDaySpecified)
                {
                    timeStepSpeciesObservationCount.Periodicity     = Periodicity.WeekOfTheYear;
                    timeStepSpeciesObservationCount.IsDateSpecified = false;
                    timeStepSpeciesObservationCount.Name            = week.ToString(CultureInfo.InvariantCulture);
                }

                if (!isYearSpecified &&
                    !isMonthSpecified &&
                    !isWeekSpecified &&
                    isDaySpecified)
                {
                    timeStepSpeciesObservationCount.Periodicity     = Periodicity.DayOfTheYear;
                    timeStepSpeciesObservationCount.IsDateSpecified = false;
                    timeStepSpeciesObservationCount.Name            = day.ToString(CultureInfo.InvariantCulture);
                }
            }
        }