File: Util\ProviderUtil.cs
Project: ndp\fx\src\xsp\system\Web\System.Web.csproj (System.Web)
//------------------------------------------------------------------------------
// <copyright file="Sec.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------
 
/*
 * Sec
 * 
 * Copyright (c) 1998-1999, Microsoft Corporation
 * 
 */
 
namespace System.Web.Util {
    using System.Collections.Specialized;
    using System.Web.Mail;
    using System.Configuration;
    using System.Globalization;
 
    internal static class ProviderUtil {
        internal const int  Infinite = Int32.MaxValue;
 
        internal static void GetAndRemoveStringAttribute(NameValueCollection config, string attrib, string providerName, ref string val) {
            val = config.Get(attrib);
            config.Remove(attrib);
        }
        
        internal static void GetAndRemovePositiveAttribute(NameValueCollection config, string attrib, string providerName, ref int val) {
            GetPositiveAttribute(config, attrib, providerName, ref val);
            config.Remove(attrib);
        }
            
        internal static void GetPositiveAttribute(NameValueCollection config, string attrib, string providerName, ref int val) {
            string s = config.Get(attrib);
            int t;
 
            if (s == null) {
                return;
            }
 
            try {
                t = Convert.ToInt32(s, CultureInfo.InvariantCulture);
            }
            catch (Exception e){
                if (e is ArgumentException || e is FormatException || e is OverflowException) {
                    throw new ConfigurationErrorsException(
                        SR.GetString(SR.Invalid_provider_positive_attributes, attrib, providerName));
                }
                else {
                    throw;
                }
                
            }
            
            if (t < 0) {
                throw new ConfigurationErrorsException(
                    SR.GetString(SR.Invalid_provider_positive_attributes, attrib, providerName));
 
            }
 
            val = t;
        }
 
        internal static void GetAndRemovePositiveOrInfiniteAttribute(NameValueCollection config, string attrib, string providerName, ref int val) {
            GetPositiveOrInfiniteAttribute(config, attrib, providerName, ref val);
            config.Remove(attrib);
        }
            
        internal static void GetPositiveOrInfiniteAttribute(NameValueCollection config, string attrib, string providerName, ref int val) {
            string s = config.Get(attrib);
            int t;
 
            if (s == null) {
                return;
            }
 
            if (s == "Infinite") {
                t = ProviderUtil.Infinite;
            }
            else {
                try {
                    t = Convert.ToInt32(s, CultureInfo.InvariantCulture);
                }
                catch (Exception e){
                    if (e is ArgumentException || e is FormatException || e is OverflowException) {
                        throw new ConfigurationErrorsException(
                            SR.GetString(SR.Invalid_provider_positive_attributes, attrib, providerName));
                    }
                    else {
                        throw;
                    }
                    
                }
                
                if (t < 0) {
                    throw new ConfigurationErrorsException(
                        SR.GetString(SR.Invalid_provider_positive_attributes, attrib, providerName));
 
                }
            }
 
            val = t;
        }
 
        internal static void GetAndRemoveNonZeroPositiveOrInfiniteAttribute(NameValueCollection config, string attrib, string providerName, ref int val) {
            GetNonZeroPositiveOrInfiniteAttribute(config, attrib, providerName, ref val);
            config.Remove(attrib);
        }
 
        internal static void GetNonZeroPositiveOrInfiniteAttribute(NameValueCollection config, string attrib, string providerName, ref int val) {
            string s = config.Get(attrib);
            int t;
 
            if (s == null) {
                return;
            }
 
            if (s == "Infinite") {
                t = ProviderUtil.Infinite;
            }
            else {
                try {
                    t = Convert.ToInt32(s, CultureInfo.InvariantCulture);
                }
                catch (Exception e){
                    if (e is ArgumentException || e is FormatException || e is OverflowException) {
                        throw new ConfigurationErrorsException(
                            SR.GetString(SR.Invalid_provider_non_zero_positive_attributes, attrib, providerName));
                    }
                    else {
                        throw;
                    }
                    
                }
                
                if (t <= 0) {
                    throw new ConfigurationErrorsException(
                        SR.GetString(SR.Invalid_provider_non_zero_positive_attributes, attrib, providerName));
 
                }
            }
 
            val = t;
        }
 
        internal static void GetAndRemoveBooleanAttribute(NameValueCollection config, string attrib, string providerName, ref bool val) {
            GetBooleanAttribute(config, attrib, providerName, ref val);
            config.Remove(attrib);
        }
        
        internal static void GetBooleanAttribute(NameValueCollection config, string attrib, string providerName, ref bool val) {
            string s = config.Get(attrib);
            if (s == null) {
                return;
            }
            
            if (s == "true") {
                val = true;
            }
            else if (s == "false") {
                val = false;
            }
            else {
                throw new ConfigurationErrorsException(SR.GetString(SR.Invalid_provider_attribute, attrib, providerName, s));
            }
        }
 
        internal static void GetAndRemoveRequiredNonEmptyStringAttribute(NameValueCollection config, string attrib, string providerName, ref string val) {
            GetRequiredNonEmptyStringAttribute(config, attrib, providerName, ref val);
            config.Remove(attrib);            
        }
        
        internal static void GetRequiredNonEmptyStringAttribute(NameValueCollection config, string attrib, string providerName, ref string val) {
            GetNonEmptyStringAttributeInternal(config, attrib, providerName, ref val, true);
        }
        
        private static void GetNonEmptyStringAttributeInternal(NameValueCollection config, string attrib, string providerName, ref string val, bool required) {
            string s = config.Get(attrib);
 
            // If it's (null and required) -OR- (empty string) we throw
            if ((s == null && required) || (s.Length == 0)) {
                throw new ConfigurationErrorsException(
                    SR.GetString(SR.Provider_missing_attribute, attrib, providerName));
            }
 
            val = s;
        }
 
        internal static void CheckUnrecognizedAttributes(NameValueCollection config, string providerName) {
            if (config.Count > 0)
            {
                string attribUnrecognized = config.GetKey(0);
                if (!String.IsNullOrEmpty(attribUnrecognized))
                    throw new ConfigurationErrorsException(
                                    SR.GetString(SR.Unexpected_provider_attribute, attribUnrecognized, providerName));
            }
        }
    }
 
}