Example #1
0
 /// <summary>
 /// Performs list-range validation.
 ///
 /// Defined in:
 /// http://xmpp.org/extensions/xep-0122.html#usecases-ranges
 /// </summary>
 /// <param name="Additional">Additional validation method.</param>
 /// <param name="Min">Minimum number of options to select.</param>
 /// <param name="Max">Maximum number of options to select.</param>
 public ListRangeValidation(ValidationMethod Additional, int Min, int Max)
     : base()
 {
     this.additional = Additional;
     this.min        = Min;
     this.max        = Max;
 }
        /// <summary>
        /// Merges the validation method with a secondary validation method, if possible.
        /// </summary>
        /// <param name="SecondaryValidationMethod">Secondary validation method to merge with.</param>
        /// <param name="DataType">Underlying data type.</param>
        /// <returns>If merger was possible.</returns>
        public override bool Merge(ValidationMethod SecondaryValidationMethod, DataType DataType)
        {
            if (!(SecondaryValidationMethod is RegexValidation V2))
            {
                return(false);
            }

            return(this.regex == V2.regex);
        }
Example #3
0
        /// <summary>
        /// Merges the validation method with a secondary validation method, if possible.
        /// </summary>
        /// <param name="SecondaryValidationMethod">Secondary validation method to merge with.</param>
        /// <param name="DataType">Underlying data type.</param>
        /// <returns>If merger was possible.</returns>
        public override bool Merge(ValidationMethod SecondaryValidationMethod, DataType DataType)
        {
            RegexValidation V2 = SecondaryValidationMethod as RegexValidation;

            if (V2 is null)
            {
                return(false);
            }

            return(this.regex == V2.regex);
        }
Example #4
0
        /// <summary>
        /// Merges the validation method with a secondary validation method, if possible.
        /// </summary>
        /// <param name="SecondaryValidationMethod">Secondary validation method to merge with.</param>
        /// <param name="DataType">Underlying data type.</param>
        /// <returns>If merger was possible.</returns>
        public override bool Merge(ValidationMethod SecondaryValidationMethod, DataType DataType)
        {
            if (!(SecondaryValidationMethod is ListRangeValidation V2))
            {
                return(false);
            }

            if ((this.additional is null) ^ (V2.additional is null))
            {
                return(false);
            }

            if (!this.additional.Merge(V2.additional, DataType))
            {
                return(false);
            }

            this.min = Math.Max(this.min, V2.min);
            this.max = Math.Min(this.max, V2.max);

            return(this.min <= this.max);
        }
Example #5
0
        /// <summary>
        /// Merges the validation method with a secondary validation method, if possible.
        /// </summary>
        /// <param name="SecondaryValidationMethod">Secondary validation method to merge with.</param>
        /// <param name="DataType">Underlying data type.</param>
        /// <returns>If merger was possible.</returns>
        public override bool Merge(ValidationMethod SecondaryValidationMethod, DataType DataType)
        {
            RangeValidation V2 = SecondaryValidationMethod as RangeValidation;

            if (V2 is null)
            {
                return(false);
            }

            if (string.IsNullOrEmpty(this.min) ^ string.IsNullOrEmpty(V2.min))
            {
                return(false);
            }

            if (string.IsNullOrEmpty(this.max) ^ string.IsNullOrEmpty(V2.max))
            {
                return(false);
            }

            if (this.min == V2.min && this.max == V2.max)
            {
                return(true);
            }

            if (DataType is null)
            {
                return(false);
            }

            object      Min, Max;
            object      Min2, Max2;
            IComparable Comparable;
            int         i;

            if (!string.IsNullOrEmpty(this.min) && this.min != V2.min)
            {
                if (string.IsNullOrEmpty(this.min))
                {
                    Min = null;
                }
                else
                {
                    Min = DataType.Parse(this.min);
                    if (Min is null)
                    {
                        return(false);
                    }
                }

                if (string.IsNullOrEmpty(V2.min))
                {
                    Min2 = null;
                }
                else
                {
                    Min2 = DataType.Parse(V2.min);
                    if (Min2 is null)
                    {
                        return(false);
                    }
                }

                Comparable = Min as IComparable;
                if (Comparable is null)
                {
                    return(false);
                }

                try
                {
                    i = Comparable.CompareTo(Min2);
                }
                catch (Exception)
                {
                    return(false);
                }

                if (i < 0)
                {
                    this.min = V2.min;
                }
            }

            if (!string.IsNullOrEmpty(this.max) && this.max != V2.max)
            {
                if (string.IsNullOrEmpty(this.max))
                {
                    Max = null;
                }
                else
                {
                    Max = DataType.Parse(this.max);
                    if (Max is null)
                    {
                        return(false);
                    }
                }

                if (string.IsNullOrEmpty(V2.max))
                {
                    Max2 = null;
                }
                else
                {
                    Max2 = DataType.Parse(V2.max);
                    if (Max2 is null)
                    {
                        return(false);
                    }
                }

                Comparable = Max as IComparable;
                if (Comparable is null)
                {
                    return(false);
                }

                try
                {
                    i = Comparable.CompareTo(Max2);
                }
                catch (Exception)
                {
                    return(false);
                }

                if (i > 0)
                {
                    this.max = V2.max;
                }
            }

            return(true);
        }
Example #6
0
 /// <summary>
 /// Merges the validation method with a secondary validation method, if possible.
 /// </summary>
 /// <param name="SecondaryValidationMethod">Secondary validation method to merge with.</param>
 /// <param name="DataType">Underlying data type.</param>
 /// <returns>If merger was possible.</returns>
 public abstract bool Merge(ValidationMethod SecondaryValidationMethod, DataType DataType);
Example #7
0
 /// <summary>
 /// Merges the validation method with a secondary validation method, if possible.
 /// </summary>
 /// <param name="SecondaryValidationMethod">Secondary validation method to merge with.</param>
 /// <param name="DataType">Underlying data type.</param>
 /// <returns>If merger was possible.</returns>
 public override bool Merge(ValidationMethod SecondaryValidationMethod, DataType DataType)
 {
     return(SecondaryValidationMethod is BasicValidation);
 }