A utility class related to file utilities.
Esempio n. 1
0
        /// <summary>
        /// Evaluates a property using the StringParser. Equivalent to StringParser.Parse("${" + propertyName + "}");
        /// </summary>
        public static string GetValue(string propertyName, params StringTagPair[] customTags)
        {
            if (propertyName == null)
            {
                throw new ArgumentNullException("propertyName");
            }
            if (propertyName == "$")
            {
                return("$");
            }

            if (customTags != null)
            {
                foreach (StringTagPair pair in customTags)
                {
                    if (propertyName.Equals(pair.Tag, StringComparison.OrdinalIgnoreCase))
                    {
                        return(pair.Value);
                    }
                }
            }

            int k = propertyName.IndexOf(':');

            if (k <= 0)
            {
                // it's property without prefix

                if (propertyName.Equals("DATE", StringComparison.OrdinalIgnoreCase))
                {
                    return(DateTime.Today.ToShortDateString());
                }
                if (propertyName.Equals("TIME", StringComparison.OrdinalIgnoreCase))
                {
                    return(DateTime.Now.ToShortTimeString());
                }
                if (propertyName.Equals("ProductName", StringComparison.OrdinalIgnoreCase))
                {
                    return(MessageService.ProductName);
                }
                if (propertyName.Equals("GUID", StringComparison.OrdinalIgnoreCase))
                {
                    return(Guid.NewGuid().ToString().ToUpperInvariant());
                }
                if (propertyName.Equals("USER", StringComparison.OrdinalIgnoreCase))
                {
                    return(Environment.UserName);
                }
                if (propertyName.Equals("Version", StringComparison.OrdinalIgnoreCase))
                {
                    return(RevisionClass.FullVersion);
                }
                if (propertyName.Equals("CONFIGDIRECTORY", StringComparison.OrdinalIgnoreCase))
                {
                    return(PropertyService.ConfigDirectory);
                }

                foreach (IStringTagProvider provider in stringTagProviders)
                {
                    string result = provider.ProvideString(propertyName, customTags);
                    if (result != null)
                    {
                        return(result);
                    }
                }

                return(null);
            }
            else
            {
                // it's a prefixed property


                // res: properties are quite common, so optimize by testing for them first
                // before allocaing the prefix/propertyName strings
                // All other prefixed properties {prefix:Key} shoulg get handled in the switch below.
                if (propertyName.StartsWith("res:", StringComparison.OrdinalIgnoreCase))
                {
                    try {
                        return(Parse(ResourceService.GetString(propertyName.Substring(4)), customTags));
                    } catch (ResourceNotFoundException) {
                        return(null);
                    }
                }

                string prefix = propertyName.Substring(0, k);
                propertyName = propertyName.Substring(k + 1);
                switch (prefix.ToUpperInvariant())
                {
                case "SDKTOOLPATH":
                    return(FileUtility.GetSdkPath(propertyName));

                case "ADDINPATH":
                    foreach (AddIn addIn in AddInTree.AddIns)
                    {
                        if (addIn.Manifest.Identities.ContainsKey(propertyName))
                        {
                            return(System.IO.Path.GetDirectoryName(addIn.FileName));
                        }
                    }
                    return(null);

                case "DATE":
                    try {
                        return(DateTime.Now.ToString(propertyName, CultureInfo.CurrentCulture));
                    } catch (Exception ex) {
                        return(ex.Message);
                    }

                case "ENV":
                    return(Environment.GetEnvironmentVariable(propertyName));

                case "PROPERTY":
                    return(GetProperty(propertyName));

                default:
                    IStringTagProvider provider;
                    if (prefixedStringTagProviders.TryGetValue(prefix, out provider))
                    {
                        return(provider.ProvideString(propertyName, customTags));
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
        }