public static uint EvaluateExpressionUint(ConfigDescription param) { if (param.DefaultValue.Contains('*')) { uint res = 1; var splited = param.DefaultValue.Split('*'); foreach (var token in splited) { if (HasHexPrefix(token)) { res *= Convert.ToUInt32(token, 16); continue; } res *= uint.Parse(token, CultureInfo.InvariantCulture); } return(res); } if (HasHexPrefix(param.DefaultValue)) { return(Convert.ToUInt32(param.DefaultValue, 16)); } return(uint.Parse(param.DefaultValue, CultureInfo.InvariantCulture)); }
string ConvertSectionPropertyGroupType(ConfigDescription configDescription) { string sectionName = configDescription.SectionName; if (!PropertyGroupSectionTypes.ContainsKey(sectionName)) { throw new ArgumentException(String.Format( StringResources.Error_FabricValidator_InvalidSectionPropertyGroupType, configDescription.Type, sectionName)); } return(PropertyGroupSectionTypes[sectionName]); }
public static double EvaluateExpressionDouble(ConfigDescription param) { if (param.DefaultValue.Contains('*')) { double res = 1; var splited = param.DefaultValue.Split('*'); foreach (var token in splited) { res *= double.Parse(token, CultureInfo.InvariantCulture); } return(res); } return(double.Parse(param.DefaultValue, CultureInfo.InvariantCulture)); }
public static string EvaluateExpressionString(ConfigDescription param) { if (param.DefaultValue.StartsWith("Common::SecureString(L\"") && param.DefaultValue.EndsWith("\")")) { // Common::SecureString is a native class and default config values are declared using it. // Managed code that parses default config values must strip off the native class name. // return(param.DefaultValue.Substring(23, param.DefaultValue.Length - 25)); } else if (param.DefaultValue.StartsWith("L\"") && param.DefaultValue.EndsWith("\"")) { if (param.DefaultValue.Length == 3) { return(""); } else { return(param.DefaultValue.Substring(2, param.DefaultValue.Length - 3)); } } return(param.DefaultValue); }
private static Dictionary <string, Dictionary <string, ConfigDescription> > ReadConfigurations() { Assembly currentAssembly = typeof(WindowsFabricSettings).GetTypeInfo().Assembly; TextReader reader = new StreamReader(currentAssembly.GetManifestResourceStream(FabricValidatorConstants.ConfigurationsFileName)); var configurations = new Dictionary <string, Dictionary <string, ConfigDescription> >(StringComparer.OrdinalIgnoreCase); string line; while ((line = reader.ReadLine()) != null) { if (line.StartsWith("#", StringComparison.Ordinal)) { continue; } string[] configurationInfo = line.Split(','); ConfigDescription configDesc = new ConfigDescription() { SectionName = configurationInfo[0].Trim(), SettingName = configurationInfo[1].Trim(), Type = configurationInfo[2].Trim(), DefaultValue = configurationInfo[3].Trim(), UpgradePolicy = (UpgradePolicy)Enum.Parse(typeof(UpgradePolicy), configurationInfo[4].Trim()), SettingType = configurationInfo[5].Trim() }; try { if (String.Equals(configDesc.Type, TimeSpanType, StringComparison.OrdinalIgnoreCase) || String.Equals(configDesc.Type, CommonTimeSpanType, StringComparison.OrdinalIgnoreCase)) { configDesc.DefaultValue = EvaluateExpressionTimeSpan(configDesc).TotalSeconds.ToString(CultureInfo.InvariantCulture); } else if (String.Equals(configDesc.Type, IntType, StringComparison.OrdinalIgnoreCase)) { configDesc.DefaultValue = EvaluateExpressionInt(configDesc).ToString(CultureInfo.InvariantCulture); } else if (String.Equals(configDesc.Type, UIntType, StringComparison.OrdinalIgnoreCase)) { configDesc.DefaultValue = EvaluateExpressionUint(configDesc).ToString(CultureInfo.InvariantCulture); } else if (String.Equals(configDesc.Type, DoubleType, StringComparison.OrdinalIgnoreCase)) { configDesc.DefaultValue = EvaluateExpressionDouble(configDesc).ToString(CultureInfo.InvariantCulture); } else if (String.Equals(configDesc.Type, BoolType, StringComparison.OrdinalIgnoreCase)) { // no-op } else if (String.Equals(configDesc.Type, StringType, StringComparison.OrdinalIgnoreCase) || String.Equals(configDesc.Type, SecureStringType, StringComparison.OrdinalIgnoreCase)) { configDesc.DefaultValue = EvaluateExpressionString(configDesc); } } catch (Exception e) { throw new ArgumentException(String.Format(StringResources.Warning_ThrowErrorWithParameterName2, configDesc.SectionName, configDesc.SettingName, e)); } if (!configurations.ContainsKey(configDesc.SectionName)) { configurations.Add(configDesc.SectionName, new Dictionary <string, ConfigDescription>(StringComparer.OrdinalIgnoreCase)); } if (configurations[configDesc.SectionName].ContainsKey(configDesc.SettingName)) { throw new ArgumentException(string.Format(StringResources.Error_FabricValidator_DuplicateParameterConfiguration, configDesc.SettingName, configDesc.SectionName)); } configurations[configDesc.SectionName].Add( configDesc.SettingName, configDesc); } return(configurations); }
public static TimeSpan EvaluateExpressionTimeSpan(ConfigDescription param) { // The default value can be in the following formats: // 1. TimeSpan::Zero or TimeSpan::MinValue or TimeSpan::MaxValue // 2. TimeSpan::FromSeconds(x) or FromMinutes(x) or FromTicks(x) or FromMilliseconds(x) // 'x' can either be a decimal/integer or an expression consisting of a product of multiple decimals/integers // Case 1 - TimeSpan::Zero if ( String.Equals(param.DefaultValue, FabricValidatorConstants.DefaultValues.TimeSpanZero, StringComparison.OrdinalIgnoreCase) || String.Equals(param.DefaultValue, FabricValidatorConstants.DefaultValues.CommonTimeSpanZero, StringComparison.OrdinalIgnoreCase)) { return(TimeSpan.Zero); } // Case 2 - TimeSpan::MinValue if ( String.Equals(param.DefaultValue, FabricValidatorConstants.DefaultValues.TimeSpanMinValue, StringComparison.OrdinalIgnoreCase) || String.Equals(param.DefaultValue, FabricValidatorConstants.DefaultValues.CommonTimeSpanMinValue, StringComparison.OrdinalIgnoreCase)) { return(TimeSpan.MinValue); } // Case 3 - TimeSpan::MaxValue if ( String.Equals(param.DefaultValue, FabricValidatorConstants.DefaultValues.TimeSpanMaxValue, StringComparison.OrdinalIgnoreCase) || String.Equals(param.DefaultValue, FabricValidatorConstants.DefaultValues.CommonTimeSpanMaxValue, StringComparison.OrdinalIgnoreCase)) { return(TimeSpan.MaxValue); } // Other cases involve parsing the double value from the format - TimeSpan::From*(x) var expression = param.DefaultValue.Substring( param.DefaultValue.IndexOf('(') + 1, param.DefaultValue.IndexOf(')') - param.DefaultValue.IndexOf('(') - 1); // If the timespan is in Ticks, the only possible value is long if ( param.DefaultValue.StartsWith(FabricValidatorConstants.DefaultValues.CommonTimeSpanFromTicks, StringComparison.OrdinalIgnoreCase) || param.DefaultValue.StartsWith(FabricValidatorConstants.DefaultValues.TimeSpanFromTicks, StringComparison.OrdinalIgnoreCase)) { long result = 1; // We allow for the string to be a product of ints/decimals foreach (string token in expression.Split('*')) { result *= long.Parse(token, CultureInfo.InvariantCulture); } // unit is ticks return(TimeSpan.FromTicks(result)); } else { // If the timespan is in seconds,milliseconds or minutes, they can be represented as doubles double result = 1; // We allow for the string to be a product of ints/decimals foreach (string token in expression.Split('*')) { result *= double.Parse(token, CultureInfo.InvariantCulture); } if ( param.DefaultValue.StartsWith( FabricValidatorConstants.DefaultValues.CommonTimeSpanFromSeconds, StringComparison.OrdinalIgnoreCase) || param.DefaultValue.StartsWith(FabricValidatorConstants.DefaultValues.TimeSpanFromSeconds, StringComparison.OrdinalIgnoreCase)) { // unit is seconds return(TimeSpan.FromSeconds(result)); } else if ( param.DefaultValue.StartsWith( FabricValidatorConstants.DefaultValues.CommonTimeSpanFromMinutes, StringComparison.OrdinalIgnoreCase) || param.DefaultValue.StartsWith( FabricValidatorConstants.DefaultValues.TimeSpanFromMinutes, StringComparison.OrdinalIgnoreCase)) { // unit is minutes return(TimeSpan.FromMinutes(result)); } else if ( param.DefaultValue.StartsWith( FabricValidatorConstants.DefaultValues.CommonTimeSpanFromHours, StringComparison.OrdinalIgnoreCase) || param.DefaultValue.StartsWith( FabricValidatorConstants.DefaultValues.TimeSpanFromHours, StringComparison.OrdinalIgnoreCase)) { // unit is hours return(TimeSpan.FromHours(result)); } else if ( param.DefaultValue.StartsWith( FabricValidatorConstants.DefaultValues.CommonTimeSpanFromMilliseconds, StringComparison.OrdinalIgnoreCase) || param.DefaultValue.StartsWith( FabricValidatorConstants.DefaultValues.TimeSpanFromMilliseconds, StringComparison.OrdinalIgnoreCase)) { // unit is milliseconds return(TimeSpan.FromMilliseconds(result)); } else { throw new ArgumentException(string.Format(StringResources.Error_FabricValidator_InvalidValue, param.SectionName, param.SettingName, param.Type, param.DefaultValue)); } } }