Created
November 20, 2009 16:42
-
-
Save KevM/239611 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public abstract class RuleContextView : AbstractSparkView | |
| { | |
| public IRuleContext Context { get; set; } | |
| public override string ToString() | |
| { | |
| return Context.ToString(); | |
| } | |
| } | |
| public interface ITemplateTransformer | |
| { | |
| string TransformFromTemplate(string templateName, IRuleContext ruleContext); | |
| string TransformFromString(string templateContents, IRuleContext ruleContext); | |
| } | |
| public class TemplateTransformer : ITemplateTransformer | |
| { | |
| private readonly EmailSettings _emailSettings; | |
| public TemplateTransformer(EmailSettings emailSettings) | |
| { | |
| _emailSettings = emailSettings; | |
| } | |
| private static ISparkSettings getSparkSettings() | |
| { | |
| return (SparkSectionHandler) ConfigurationManager.GetSection("spark"); | |
| } | |
| public string TransformFromTemplate(string templateName, IRuleContext ruleContext) | |
| { | |
| return generateFromView(ruleContext, engine => | |
| { | |
| var viewFolder = new FileSystemViewFolder(_emailSettings.EmailTemplatePath); | |
| engine.ViewFolder = viewFolder; | |
| var sparkViewDescriptor = new SparkViewDescriptor().AddTemplate(templateName); | |
| var view = (RuleContextView)engine.CreateInstance(sparkViewDescriptor); | |
| return view; | |
| }); | |
| } | |
| public string TransformFromString(string templateContents, IRuleContext ruleContext) | |
| { | |
| return generateFromView(ruleContext, engine => | |
| { | |
| var templateName = templateContents.GetMD5Hash(); | |
| var viewFolder = new InMemoryViewFolder | |
| { | |
| {templateName, templateContents} | |
| }; | |
| engine.ViewFolder = viewFolder; | |
| var sparkViewDescriptor = new SparkViewDescriptor().AddTemplate(templateName); | |
| var view = (RuleContextView)engine.CreateInstance(sparkViewDescriptor); | |
| return view; | |
| }); | |
| } | |
| private static string generateFromView(IRuleContext ruleContext, Func<SparkViewEngine, RuleContextView> viewFactoryFunction) | |
| { | |
| var sparkViewEngine = new SparkViewEngine(getSparkSettings()); | |
| var sparkView = viewFactoryFunction(sparkViewEngine); | |
| sparkView.Context = ruleContext; | |
| string output; | |
| using (var writer = new StringWriter()) | |
| { | |
| try | |
| { | |
| sparkView.RenderView(writer); | |
| } | |
| finally | |
| { | |
| sparkViewEngine.ReleaseInstance(sparkView); | |
| } | |
| output = writer.ToString(); | |
| } | |
| return output; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment