Created
April 16, 2018 00:51
-
-
Save adam17amo/a5e6a07b8950d40d3b7285c8860f7ff9 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 virtual class TriggerHandler { | |
| // Current context of the trigger, overridable in tests | |
| @TestVisible | |
| private TriggerContext context; | |
| // Constructor | |
| public TriggerHandler() { | |
| this.setTriggerContext(); | |
| } | |
| // Main method that will be called during execution | |
| public void run() { | |
| // Dispatch to the correct handler method | |
| if(this.context == TriggerContext.BEFORE_INSERT) { | |
| this.beforeInsert(); | |
| } else if(this.context == TriggerContext.BEFORE_UPDATE) { | |
| this.beforeUpdate(); | |
| } else if(this.context == TriggerContext.BEFORE_DELETE) { | |
| this.beforeDelete(); | |
| } else if(this.context == TriggerContext.AFTER_INSERT) { | |
| this.afterInsert(); | |
| } else if(this.context == TriggerContext.AFTER_UPDATE) { | |
| this.afterUpdate(); | |
| } else if(this.context == TriggerContext.AFTER_DELETE) { | |
| this.afterDelete(); | |
| } else if(this.context == TriggerContext.AFTER_UNDELETE) { | |
| this.afterUndelete(); | |
| } | |
| } | |
| @TestVisible | |
| private void setTriggerContext() { | |
| this.setTriggerContext(false); | |
| } | |
| // Determine the Trigger Context | |
| @TestVisible | |
| private void setTriggerContext(Boolean testMode) { | |
| if(Trigger.isExecuting && Trigger.isBefore && Trigger.isInsert) { | |
| this.context = TriggerContext.BEFORE_INSERT; | |
| } else if(Trigger.isExecuting && Trigger.isBefore && Trigger.isUpdate) { | |
| this.context = TriggerContext.BEFORE_UPDATE; | |
| } else if(Trigger.isExecuting && Trigger.isBefore && Trigger.isDelete) { | |
| this.context = TriggerContext.BEFORE_DELETE; | |
| } else if(Trigger.isExecuting && Trigger.isAfter && Trigger.isInsert) { | |
| this.context = TriggerContext.AFTER_INSERT; | |
| } else if(Trigger.isExecuting && Trigger.isAfter && Trigger.isUpdate) { | |
| this.context = TriggerContext.AFTER_UPDATE; | |
| } else if(Trigger.isExecuting && Trigger.isAfter && Trigger.isDelete) { | |
| this.context = TriggerContext.AFTER_DELETE; | |
| } else if(Trigger.isExecuting && Trigger.isAfter && Trigger.isUndelete) { | |
| this.context = TriggerContext.AFTER_UNDELETE; | |
| } | |
| } | |
| // Context-specific methods for override | |
| @TestVisible | |
| protected virtual void beforeInsert(){} | |
| @TestVisible | |
| protected virtual void beforeUpdate(){} | |
| @TestVisible | |
| protected virtual void beforeDelete(){} | |
| @TestVisible | |
| protected virtual void afterInsert(){} | |
| @TestVisible | |
| protected virtual void afterUpdate(){} | |
| @TestVisible | |
| protected virtual void afterDelete(){} | |
| @TestVisible | |
| protected virtual void afterUndelete(){} | |
| // Possible trigger contexts | |
| @TestVisible | |
| private enum TriggerContext { | |
| BEFORE_INSERT, BEFORE_UPDATE, BEFORE_DELETE, | |
| AFTER_INSERT, AFTER_UPDATE, AFTER_DELETE, | |
| AFTER_UNDELETE | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment