using CloudBuilder.Core.DependencyInjection.Policy; using CloudBuilder.Core.DependencyInjection.Request; using CloudBuilder.Core.Policy; using CloudBuilder.Core.Service; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Resources; using System.Text; using System.Threading.Tasks; namespace System { public class AbstractPolicy : IPolicy { public ResourceManager rm = null; public AbstractPolicy(IContext context) { this.context = context; string[] res = Assembly.GetAssembly(this.GetType()).GetManifestResourceNames(); if (res != null && res.Length > 0) { string baseName = this.GetType().Name + "_" + context.GetCulture(); if (res.Where(x => x.Contains(baseName)).FirstOrDefault() != null) rm = new ResourceManager(Path.GetFileNameWithoutExtension(res.Where(x => x.Contains(baseName)).FirstOrDefault()), Assembly.GetAssembly(this.GetType())); else rm = new ResourceManager(Path.GetFileNameWithoutExtension(res.Where(x => x.Contains(this.GetType().Name)).FirstOrDefault()), Assembly.GetAssembly(this.GetType())); } } protected string[] values = null; private readonly IContext context; public string[] GetValues() { return this.values; } public string[] GetMessages() { if (values == null || values.Length == 0) return null; List messages = new List(); foreach (string v in values) { messages.Add(ComposeMessage(v)); } return messages.ToArray(); } public BindOption[] GetBindOptions() { if (values == null || values.Length == 0) return null; List messages = new List(); foreach (string v in values) { messages.Add(new BindOption() { BindValue = v, DisplayName = ComposeMessage(v) }); } return messages.ToArray(); } public SelectOption[] GetSelectOptions() { if (values == null || values.Length == 0) return null; List messages = new List(); foreach (string v in values) { messages.Add(new SelectOption() { BindValue = v, DisplayName = ComposeMessage(v) }); } return messages.ToArray(); } public string ComposeMessage(string msgId, params object[] p) { return ComposeMessage(msgId, context.GetCulture(), p); } public string ComposeMessage(string msgId) { return ComposeMessage(msgId, context.GetCulture()); } public string ComposeMessage(string msgId, string locale, params object[] p) { if (string.IsNullOrEmpty(msgId)) return null; if (rm == null) return null; string[] res = Assembly.GetAssembly(this.GetType()).GetManifestResourceNames(); string baseName = this.GetType().Name + "_" + locale; if (res.Where(x => x.Contains(baseName)).FirstOrDefault() != null) rm = new ResourceManager(Path.GetFileNameWithoutExtension(res.Where(x => x.Contains(baseName)).FirstOrDefault()), Assembly.GetAssembly(this.GetType())); return string.Format((string)rm.GetString(msgId), p); } public string ComposeMessage(string msgId, string locale) { if (string.IsNullOrEmpty(msgId)) return null; if (rm == null) return null; string[] res = Assembly.GetAssembly(this.GetType()).GetManifestResourceNames(); string baseName = this.GetType().Name + "_" + locale; if (res.Where(x => x.Contains(baseName)).FirstOrDefault() != null) rm = new ResourceManager(Path.GetFileNameWithoutExtension(res.Where(x => x.Contains(baseName)).FirstOrDefault()), Assembly.GetAssembly(this.GetType())); if (rm == null) return null; return string.Format((string)rm.GetString(msgId)); } public TableName[] GetTableName(T[] values) { if (values == null || values.Length == 0) return null; TableName tb = null; List> list = new List>(); foreach (T v in values) { tb = new TableName(); tb.DisplayName = ComposeMessage(v.ToString(), context.GetCulture()); tb.Value = v; list.Add(tb); } return list.ToArray(); } public Dictionary GetDictionary() { Dictionary keyValues= new Dictionary(); foreach (string v in values) { keyValues.Add(v, ComposeMessage(v, context.GetCulture())); } return keyValues; } public TableName[] GetComposeMessages(string[] values) { if (values == null || values.Length == 0) return null; TableName tb = null; List> list = new List>(); foreach (string v in values) { tb = new TableName(); tb.DisplayName = ComposeMessage(v, context.GetCulture()); tb.Value = v; list.Add(tb); } return list.ToArray(); } public TableName[] GetComposeMessages(string[] values, string locale) { if (values == null || values.Length == 0) return null; TableName tb = null; List> list = new List>(); foreach (string v in values) { tb = new TableName(); tb.DisplayName = ComposeMessage(v, locale); tb.Value = v; list.Add(tb); } return list.ToArray(); } public TableName[] GetComposeMessages() { if (values == null || values.Length == 0) return null; TableName tb = null; List> list = new List>(); foreach (string v in values) { tb = new TableName(); tb.DisplayName = ComposeMessage(v, context.GetCulture()); tb.Value = v; list.Add(tb); } return list.ToArray(); } } }