Guest User

Untitled

a guest
Apr 23rd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
  1. public virtual class TriggerHandler {
  2.  
  3. // Current context of the trigger, overridable in tests
  4. @TestVisible
  5. private TriggerContext context;
  6.  
  7. // Constructor
  8. public TriggerHandler() {
  9. this.setTriggerContext();
  10. }
  11.  
  12. // Main method that will be called during execution
  13. public void run() {
  14. // Dispatch to the correct handler method
  15. if(this.context == TriggerContext.BEFORE_INSERT) {
  16. this.beforeInsert();
  17. } else if(this.context == TriggerContext.BEFORE_UPDATE) {
  18. this.beforeUpdate();
  19. } else if(this.context == TriggerContext.BEFORE_DELETE) {
  20. this.beforeDelete();
  21. } else if(this.context == TriggerContext.AFTER_INSERT) {
  22. this.afterInsert();
  23. } else if(this.context == TriggerContext.AFTER_UPDATE) {
  24. this.afterUpdate();
  25. } else if(this.context == TriggerContext.AFTER_DELETE) {
  26. this.afterDelete();
  27. } else if(this.context == TriggerContext.AFTER_UNDELETE) {
  28. this.afterUndelete();
  29. }
  30. }
  31.  
  32. @TestVisible
  33. private void setTriggerContext() {
  34. this.setTriggerContext(false);
  35. }
  36.  
  37. // Determine the Trigger Context
  38. @TestVisible
  39. private void setTriggerContext(Boolean testMode) {
  40. if(Trigger.isExecuting && Trigger.isBefore && Trigger.isInsert) {
  41. this.context = TriggerContext.BEFORE_INSERT;
  42. } else if(Trigger.isExecuting && Trigger.isBefore && Trigger.isUpdate) {
  43. this.context = TriggerContext.BEFORE_UPDATE;
  44. } else if(Trigger.isExecuting && Trigger.isBefore && Trigger.isDelete) {
  45. this.context = TriggerContext.BEFORE_DELETE;
  46. } else if(Trigger.isExecuting && Trigger.isAfter && Trigger.isInsert) {
  47. this.context = TriggerContext.AFTER_INSERT;
  48. } else if(Trigger.isExecuting && Trigger.isAfter && Trigger.isUpdate) {
  49. this.context = TriggerContext.AFTER_UPDATE;
  50. } else if(Trigger.isExecuting && Trigger.isAfter && Trigger.isDelete) {
  51. this.context = TriggerContext.AFTER_DELETE;
  52. } else if(Trigger.isExecuting && Trigger.isAfter && Trigger.isUndelete) {
  53. this.context = TriggerContext.AFTER_UNDELETE;
  54. }
  55. }
  56.  
  57. // Context-specific methods for override
  58. @TestVisible
  59. protected virtual void beforeInsert(){}
  60. @TestVisible
  61. protected virtual void beforeUpdate(){}
  62. @TestVisible
  63. protected virtual void beforeDelete(){}
  64. @TestVisible
  65. protected virtual void afterInsert(){}
  66. @TestVisible
  67. protected virtual void afterUpdate(){}
  68. @TestVisible
  69. protected virtual void afterDelete(){}
  70. @TestVisible
  71. protected virtual void afterUndelete(){}
  72.  
  73. // Possible trigger contexts
  74. @TestVisible
  75. private enum TriggerContext {
  76. BEFORE_INSERT, BEFORE_UPDATE, BEFORE_DELETE,
  77. AFTER_INSERT, AFTER_UPDATE, AFTER_DELETE,
  78. AFTER_UNDELETE
  79. }
  80. }
Add Comment
Please, Sign In to add comment