Source/NuGetGallery.Operations/Common/ResourceHelper.cs (98 lines of code) (raw):
using NuGetGallery.Operations.Common;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Text;
namespace NuGetGallery.Operations
{
public static class ResourceHelper
{
private static Dictionary<Type, ResourceManager> _cachedManagers;
public static string GetLocalizedString(Type resourceType, string resourceNames)
{
if (String.IsNullOrEmpty(resourceNames))
{
throw new ArgumentException(CommonResources.Argument_Cannot_Be_Null_Or_Empty, "resourceNames");
}
if (resourceType == null)
{
throw new ArgumentNullException("resourceType");
}
if (_cachedManagers == null)
{
_cachedManagers = new Dictionary<Type, ResourceManager>();
}
ResourceManager resourceManager;
if (!_cachedManagers.TryGetValue(resourceType, out resourceManager))
{
PropertyInfo property = resourceType.GetProperty("ResourceManager", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
if (property == null || property.GetGetMethod(nonPublic: true) == null)
{
throw new InvalidOperationException(
String.Format(CultureInfo.CurrentCulture, TaskResources.ResourceTypeDoesNotHaveProperty, resourceType, "ResourceManager"));
}
if (property.PropertyType != typeof(ResourceManager))
{
throw new InvalidOperationException(
String.Format(CultureInfo.CurrentCulture, TaskResources.ResourcePropertyIncorrectType, resourceNames, resourceType));
}
resourceManager = (ResourceManager)property.GetGetMethod(nonPublic: true)
.Invoke(obj: null, parameters: null);
}
var builder = new StringBuilder();
foreach (var resource in resourceNames.Split(';'))
{
string value = resourceManager.GetString(resource);
if (String.IsNullOrEmpty(value))
{
throw new InvalidOperationException(
String.Format(CultureInfo.CurrentCulture, TaskResources.ResourceTypeDoesNotHaveProperty, resourceType, resource));
}
if (builder.Length > 0)
{
builder.AppendLine();
}
builder.Append(value);
}
return builder.ToString();
}
public static string GetBatchFromSqlFile(string filename)
{
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(filename))
{
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
public static IEnumerable<string> GetBatchesFromSqlFile(string filename)
{
List<string> batches = new List<string>();
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(filename))
{
using (var reader = new StreamReader(stream))
{
StringBuilder batch = new StringBuilder();
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (line.Trim().Equals("GO", StringComparison.OrdinalIgnoreCase))
{
batches.Add(batch.ToString());
batch.Clear();
}
else
{
batch.AppendLine(line);
}
}
}
}
return batches;
}
}
}