/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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);
/// <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); }