1 19 20 package za.org.coefficient.core; 21 22 import za.org.coefficient.interfaces.*; 23 24 29 public abstract class CoefficientInterceptor { 30 32 33 public static final int INVOKE_PROCESS_CHILD = 0x100; 34 35 36 public static final int INVOKE_PROCESS_DONE = 0x101; 37 38 39 public static final int INVOKE_ABORT_LOCAL = 0x200; 40 41 42 public static final int INVOKE_ABORT_GLOBAL = 0x201; 43 44 45 public static final int INVOKE_SKIP_NEXT = 0x202; 46 47 48 public static final String ABORT_INTERCEPTOR_PREFIX = 49 "__abort_interceptor_"; 50 51 53 54 private CoefficientInterceptor sibling; 55 56 58 public void setSibling(CoefficientInterceptor val) { 59 this.sibling = val; 60 } 61 62 public CoefficientInterceptor getSibling() { 66 return sibling; 67 } 68 69 public void append(CoefficientInterceptor val) { 70 last() 71 .setSibling(val); 72 } 73 74 public int invoke(CoefficientContext ctx) throws Exception { 75 76 int result = abortNamedInterceptor(ctx); 78 if (result == INVOKE_PROCESS_CHILD) { 79 result = handleInvoke(ctx); 80 } 81 boolean doPostInvoke = true; 82 83 switch (result) { 85 case INVOKE_ABORT_LOCAL: 86 doPostInvoke = false; 87 88 case INVOKE_PROCESS_CHILD: 89 if (sibling != null) { 90 result = sibling.invoke(ctx); 91 } else { 92 result = INVOKE_PROCESS_DONE; 93 } 94 95 break; 96 97 case INVOKE_ABORT_GLOBAL: 98 99 case INVOKE_PROCESS_DONE: 100 doPostInvoke = false; 101 } 102 103 if (doPostInvoke && (result != INVOKE_ABORT_GLOBAL)) { 104 result = handlePostInvoke(ctx); 105 } 106 107 return result; 108 } 109 110 public CoefficientInterceptor last() { 111 CoefficientInterceptor result = this; 112 if (sibling != null) { 113 do { 114 result = result.sibling; 115 } while (result.sibling != null); 116 } 117 118 return result; 119 } 120 121 protected int abortNamedInterceptor(CoefficientContext ctx) { 122 return ctx.getParameterAsInt(this.getClass().getName(), 123 INVOKE_PROCESS_CHILD); 124 } 125 126 protected int handleInvoke(CoefficientContext ctx) throws Exception { 127 return INVOKE_PROCESS_CHILD; 128 } 129 130 protected int handlePostInvoke(CoefficientContext ctx) throws Exception { 131 return INVOKE_PROCESS_CHILD; 132 } 133 } 134 | Popular Tags |