The Labs \ Source Viewer \ SSCLI \ System.Configuration \ ValidatorUtils

  1. //------------------------------------------------------------------------------
  2. // <copyright file="ValidatorUtils.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. using System;
  16. using System.Collections;
  17. using System.IO;
  18. using System.Reflection;
  19. using System.Security.Permissions;
  20. using System.Xml;
  21. using System.Collections.Specialized;
  22. using System.Globalization;
  23. using System.ComponentModel;
  24. using System.Security;
  25. using System.Text;
  26. using System.Text.RegularExpressions;
  27. namespace System.Configuration
  28. {
  29.    
  30.     static internal class ValidatorUtils
  31.     {
  32.        
  33.         public static void HelperParamValidation(object value, Type allowedType)
  34.         {
  35.             if (value == null) {
  36.                 return;
  37.             }
  38.            
  39.             if (value.GetType() != allowedType) {
  40.                 throw new ArgumentException(SR.GetString(SR.Validator_value_type_invalid), String.Empty);
  41.             }
  42.         }
  43.        
  44.         public static void ValidateScalar<T>(T value, T min, T max, T resolution, bool exclusiveRange) where T : IComparable<T>
  45.         {
  46.             ValidateRangeImpl(value, min, max, exclusiveRange);
  47.            
  48.             // Validate the resolution
  49.             ValidateResolution(resolution.ToString(), Convert.ToInt64(value, CultureInfo.InvariantCulture), Convert.ToInt64(resolution, CultureInfo.InvariantCulture));
  50.         }
  51.         private static void ValidateRangeImpl<T>(T value, T min, T max, bool exclusiveRange) where T : IComparable<T>
  52.         {
  53.             IComparable<T> itfValue = (IComparable<T>)value;
  54.             IComparable<T> itfMax = (IComparable<T>)max;
  55.             bool valueIsInRange = false;
  56.            
  57.             // Check min range
  58.             if (itfValue.CompareTo(min) >= 0) {
  59.                 // TRUE: value >= min
  60.                 valueIsInRange = true;
  61.             }
  62.            
  63.             if (valueIsInRange && (itfValue.CompareTo(max) > 0)) {
  64.                 // TRUE: value > max
  65.                 valueIsInRange = false;
  66.             }
  67.            
  68.             // Throw range validation error
  69.             if (!(valueIsInRange ^ exclusiveRange)) {
  70.                 string error = null;
  71.                
  72.                 // First group of errors - the min and max range are the same. i.e. the valid value must be the same/equal to the min(max)
  73.                 if (min.Equals(max)) {
  74.                     if (exclusiveRange) {
  75.                         // Valid values are outside of range. I.e has to be different then min( or max )
  76.                         error = SR.GetString(SR.Validation_scalar_range_violation_not_different);
  77.                     }
  78.                     else {
  79.                         // Valid values are inside the range. I.e. has to be equal to min ( or max )
  80.                         error = SR.GetString(SR.Validation_scalar_range_violation_not_equal);
  81.                     }
  82.                 }
  83.                 // Second group of errors: min != max. I.e. its a range
  84.                 else {
  85.                     if (exclusiveRange) {
  86.                         // Valid values are outside of range.
  87.                         error = SR.GetString(SR.Validation_scalar_range_violation_not_outside_range);
  88.                     }
  89.                     else {
  90.                         // Valid values are inside the range. I.e. has to be equal to min ( or max )
  91.                         error = SR.GetString(SR.Validation_scalar_range_violation_not_in_range);
  92.                     }
  93.                 }
  94.                
  95.                 throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, error, min.ToString(), max.ToString()));
  96.             }
  97.         }
  98.        
  99.         private static void ValidateResolution(string resolutionAsString, long value, long resolution)
  100.         {
  101.             Debug.Assert(resolution > 0, "resolution > 0");
  102.            
  103.             if ((value % resolution) != 0) {
  104.                 throw new ArgumentException(SR.GetString(SR.Validator_scalar_resolution_violation, resolutionAsString));
  105.             }
  106.         }
  107.        
  108.         public static void ValidateScalar(TimeSpan value, TimeSpan min, TimeSpan max, long resolutionInSeconds, bool exclusiveRange)
  109.         {
  110.             ValidateRangeImpl(value, min, max, exclusiveRange);
  111.            
  112.             // Validate the resolution
  113.             if (resolutionInSeconds > 0) {
  114.                 ValidateResolution(TimeSpan.FromSeconds(resolutionInSeconds).ToString(), value.Ticks, resolutionInSeconds * TimeSpan.TicksPerSecond);
  115.             }
  116.         }
  117.     }
  118. }

Developer Fusion