/// <summary> /// Extract placeholders from the given template. /// </summary> /// <param name="template">the template to parse.</param> /// <returns>placeholders extracted from the template.</returns> public static IList <AckEmailPlaceholder> GetPlaceholders(string template) { var regex = new Regex(_pattern); var matches = regex.Matches(template); var placeholders = new List <AckEmailPlaceholder>(matches.Count); foreach (Match match in matches) { var text = match.Groups[0].Value; var field = match.Groups[1].Value; var defaultValue = match.Groups[3].Value; var placeholder = new AckEmailPlaceholder(text, field, defaultValue); placeholders.Add(placeholder); } return(placeholders); }
/// <summary> /// Produce text content by applying replacements on the template. /// </summary> /// <param name="workItemFields">work item for which the content is generated</param> /// <param name="config">the instance config</param> /// <returns>text content produced by applying replacements for placeholders</returns> public string Apply(IWorkItemFields workItemFields, Config.InstanceConfig config) { var bodyBuilder = new StringBuilder(_text); var placeholders = AckEmailPlaceholder.GetPlaceholders(_text); var specialReplacements = GetSpecialReplacements(workItemFields, config); foreach (var placeholder in placeholders) { var fieldNameUpper = placeholder.Field.ToUpper(); var fieldValue = specialReplacements.ContainsKey(fieldNameUpper) ? specialReplacements[fieldNameUpper] : workItemFields.GetFieldValue(placeholder.Field); var value = string.IsNullOrWhiteSpace(fieldValue) ? placeholder.DefaultValue : fieldValue; Logger.DebugFormat("Replacing placeholder {0} with value '{1}'", placeholder.Text, value); bodyBuilder.Replace(placeholder.Text, value); } return(bodyBuilder.ToString()); }