/// <summary>
 /// Validates the Interference Query request.
 /// </summary>
 /// <param name="interferenceQueryRequest">The Interference Query request.</param>
 /// <param name="errorMessages">The error messages.</param>
 /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
 public virtual bool ValidateInterferenceQueryRequest(IInterferenceQueryRequest interferenceQueryRequest, out List <string> errorMessages)
 {
     errorMessages = new List <string>();
     return(true);
 }
        /// <summary>
        /// Validates the interference query request.
        /// </summary>
        /// <param name="interferenceQueryRequest">The interference query request request.</param>
        /// <param name="errorMessages">The error messages.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
        public override bool ValidateInterferenceQueryRequest(IInterferenceQueryRequest interferenceQueryRequest, out List <string> errorMessages)
        {
            errorMessages = new List <string>();

            if (string.IsNullOrEmpty(interferenceQueryRequest.TimeStamp))
            {
                errorMessages.Add(Constants.ErrorMessageTimeStampRequired);
                return(false);
            }

            if (!this.IsValid(interferenceQueryRequest.TimeStamp, out errorMessages))
            {
                return(false);
            }

            if (!this.ValidateTimeStamp(interferenceQueryRequest.TimeStamp))
            {
                errorMessages.Add(Constants.InvalidTimeStamp);
                return(false);
            }

            if (string.IsNullOrEmpty(interferenceQueryRequest.StartTime))
            {
                errorMessages.Add(Constants.ErrorMessageInterferenceQueryStartTimeRequired);
                return(false);
            }

            if (!this.ValidateTimeStamp(interferenceQueryRequest.StartTime))
            {
                errorMessages.Add(Constants.InvalidStartDate);
                return(false);
            }

            if (string.IsNullOrEmpty(interferenceQueryRequest.EndTime))
            {
                errorMessages.Add(Constants.ErrorMessageEndTimeRequired);
                return(false);
            }

            if (!this.ValidateTimeStamp(interferenceQueryRequest.EndTime))
            {
                errorMessages.Add(Constants.InvalidEndDate);
                return(false);
            }

            if (!this.IsValid(interferenceQueryRequest.Location, out errorMessages))
            {
                return(false);
            }

            if (!this.IsValid(interferenceQueryRequest.Requestor, out errorMessages))
            {
                return(false);
            }

            if (interferenceQueryRequest.Requestor != null && !(interferenceQueryRequest.Requestor.Owner.Email == null) && !string.IsNullOrEmpty(interferenceQueryRequest.Requestor.Owner.Email.Text))
            {
                bool isValidEmail = this.email.IsMatch(interferenceQueryRequest.Requestor.Owner.Email.Text);
                if (!isValidEmail)
                {
                    return(false);
                }
            }

            if (!this.IsValid(interferenceQueryRequest.StartTime, out errorMessages))
            {
                return(false);
            }

            if (!this.IsValid(interferenceQueryRequest.EndTime, out errorMessages))
            {
                return(false);
            }

            if (!this.IsValidRequestor(interferenceQueryRequest.Requestor, out errorMessages))
            {
                return(false);
            }

            var result = this.IsValidLocationInterferenceQuery(out errorMessages, interferenceQueryRequest.Location);

            return(result);
        }