/// <summary>
        /// Check that data is valid.
        /// </summary>
        /// <param name="webSpeciesObservationPageSpecification">Page specification.</param>
        public static void CheckData(this WebSpeciesObservationPageSpecification webSpeciesObservationPageSpecification)
        {
            if (!IsValidSize(webSpeciesObservationPageSpecification.Size))
            {
                throw new ArgumentOutOfRangeException("Size", "Please enter a positive Size less than or equal to " + ArtDatabanken.Settings.Default.SpeciesObservationPageMaxSize.WebToString());
            }

            if (webSpeciesObservationPageSpecification.Start <= 0)
            {
                throw new ArgumentOutOfRangeException("Start", "Please enter a positive Start position.");
            }

            if (webSpeciesObservationPageSpecification.SortOrder.IsNotNull())
            {
                foreach (WebSpeciesObservationFieldSortOrder webSpeciesObservationFieldSortOrder in webSpeciesObservationPageSpecification.SortOrder)
                {
                    if (webSpeciesObservationFieldSortOrder.Class.IsNull())
                    {
                        throw new ArgumentOutOfRangeException("Class", "Class (and Id) must be specified for sorting");
                    }
                    if (webSpeciesObservationFieldSortOrder.Class.Id.IsNull())
                    {
                        throw new ArgumentOutOfRangeException("Id", "Class Id must be specified for sorting");
                    }
                    if (webSpeciesObservationFieldSortOrder.Property.IsNull())
                    {
                        throw new ArgumentOutOfRangeException("Property", "Property (and ID) must be specified for sorting");
                    }
                    if (webSpeciesObservationFieldSortOrder.Property.Id.IsNull())
                    {
                        throw new ArgumentOutOfRangeException("Id", "Property Id must be specified for sorting");
                    }
                }
            }
        }
 /// <summary>
 /// Get information about species observations paged
 /// that matches the search criteria.
 /// </summary>
 /// <param name="clientInformation">Information about the client that makes this web service call.</param>
 /// <param name="searchCriteria">The species observation search criteria.</param>
 /// <param name="coordinateSystem">
 /// Coordinate system used in geometry search criterias
 /// and returned species observations.
 /// </param>
 /// <param name="pageSpecification"></param>
 /// <returns>Information about requested species observations.</returns>
 public List <WebDarwinCore> GetDarwinCoreBySearchCriteriaPage(WebClientInformation clientInformation,
                                                               WebSpeciesObservationSearchCriteria searchCriteria,
                                                               WebCoordinateSystem coordinateSystem,
                                                               WebSpeciesObservationPageSpecification pageSpecification)
 {
     using (ClientProxy client = new ClientProxy(this, 20))
     {
         return(client.Client.GetDarwinCoreBySearchCriteriaPage(clientInformation, searchCriteria, coordinateSystem, pageSpecification));
     }
 }
        /// <summary>
        /// Convert a ISpeciesObservationPageSpecification instance
        /// to a WebSpeciesObservationPageSpecification instance.
        /// </summary>
        /// <param name="speciesObservationPageSpecification">An ISpeciesObservationPageSpecification instance.</param>
        /// <returns>A WebSpeciesObservationPageSpecification instance.</returns>
        protected WebSpeciesObservationPageSpecification GetSpeciesObservationPageSpecification(ISpeciesObservationPageSpecification speciesObservationPageSpecification)
        {
            WebSpeciesObservationPageSpecification webSpeciesObservationPageSpecification;

            webSpeciesObservationPageSpecification           = new WebSpeciesObservationPageSpecification();
            webSpeciesObservationPageSpecification.Size      = speciesObservationPageSpecification.Size;
            webSpeciesObservationPageSpecification.SortOrder = new List <WebSpeciesObservationFieldSortOrder>();
            webSpeciesObservationPageSpecification.SortOrder = GetSortOrder(speciesObservationPageSpecification.SortOrder);
            webSpeciesObservationPageSpecification.Start     = speciesObservationPageSpecification.Start;

            return(webSpeciesObservationPageSpecification);
        }
 /// <summary>
 /// The get end row.
 /// </summary>
 /// <param name="webSpeciesObservationPageSpecification">
 /// The web species observation page specification.
 /// </param>
 /// <returns>
 /// The <see cref="long"/>.
 /// </returns>
 public static Int64 GetEndRow(this WebSpeciesObservationPageSpecification webSpeciesObservationPageSpecification)
 {
     return(webSpeciesObservationPageSpecification.Start + webSpeciesObservationPageSpecification.Size - 1);
 }
 /// <summary>
 /// Get sort order in SQL format.
 /// </summary>
 /// <param name="pageSpecification">Species observation page specification.</param>
 /// <param name="context">Web service request context.</param>
 /// <param name="searchCriteria">Species observation search criteria.</param>
 /// <returns>Sort order in SQL format.</returns>
 public static String GetSqlSortOrder(this WebSpeciesObservationPageSpecification pageSpecification,
                                      WebServiceContext context,
                                      WebSpeciesObservationSearchCriteria searchCriteria)
 {
     return(pageSpecification.SortOrder.GetSqlSortOrder(context, searchCriteria, true));
 }