Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- }
- }
Add Comment
Please, Sign In to add comment