TimberlinePosterEngine.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using InABox.Core;
  2. using InABox.Core.Postable;
  3. using InABox.Scripting;
  4. using System.Collections.Generic;
  5. using System.Formats.Asn1;
  6. using System.Globalization;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace InABox.Poster.Timberline
  11. {
  12. public class TimberlinePosterEngine<TPostable, TSettings> : PosterEngine<TPostable, ITimberlinePoster<TPostable, TSettings>, TSettings>
  13. where TPostable : Entity, IPostable, IRemotable, IPersistent, new()
  14. where TSettings : TimberlinePosterSettings<TPostable>, new()
  15. {
  16. private ScriptDocument? _script;
  17. private bool _hasCheckedScript;
  18. protected override ITimberlinePoster<TPostable, TSettings> CreatePoster()
  19. {
  20. var poster = base.CreatePoster();
  21. poster.Script = GetScriptDocument();
  22. return poster;
  23. }
  24. private ScriptDocument? GetScriptDocument()
  25. {
  26. if (_hasCheckedScript)
  27. {
  28. return _script;
  29. }
  30. var settings = GetSettings();
  31. if (settings.ScriptEnabled && !string.IsNullOrWhiteSpace(settings.Script))
  32. {
  33. var document = new ScriptDocument(settings.Script);
  34. if (!document.Compile())
  35. {
  36. throw new Exception("Script failed to compile!");
  37. }
  38. _script = document;
  39. }
  40. else
  41. {
  42. _script = null;
  43. }
  44. _hasCheckedScript = true;
  45. return _script;
  46. }
  47. public override bool BeforePost(IDataModel<TPostable> model)
  48. {
  49. return Poster.BeforePost(model);
  50. }
  51. protected override IPostResult<TPostable> DoProcess(IDataModel<TPostable> model)
  52. {
  53. return Poster.Process(model);
  54. }
  55. public override void AfterPost(IDataModel<TPostable> model, IPostResult<TPostable> result)
  56. {
  57. Poster.AfterPost(model, result);
  58. }
  59. }
  60. }