package org.theonefx.wcframework.aop;
import org.theonefx.aopaloance.intercept.MethodInterceptor;
import org.theonefx.wcframework.aop.exception.AopInvocationException;
/**
* @File : InterceptorChain.java
* @ClassName : InterceptorChain
* @Author : TheoneFx
* @Date : 2013-2-26 下午02:44:45
* @Version : v1.0
* @Description : 拦截器链
*/
public class InterceptorChain {
private MethodInterceptor[] interceptors;
private int size = 0;
public void add(MethodInterceptor interceprot) {
if (interceprot == null) {
return;
}
if (size == 0) {
interceptors = new MethodInterceptor[6];
}
if (size == interceptors.length) {
MethodInterceptor[] temp = interceptors;
interceptors = new MethodInterceptor[size + 6];
System.arraycopy(temp, 0, interceptors, 0, size);
}
interceptors[size] = interceprot;
size++;
}
public void add(MethodInterceptor[] interceprotArray) {
if (interceprotArray != null && interceprotArray.length > 0) {
for (int i = 0; i < interceprotArray.length; i++) {
add(interceprotArray[i]);
}
}
}
public MethodInterceptor get(int i) {
if (i >= size) {
throw new AopInvocationException("索引超出范围,索引号:" + i + ",chain大小:" + size);
}
return interceptors[i];
}
public int getSize() {
return size;
}
public void setInterceptors(MethodInterceptor[] interceptors) {
this.interceptors = interceptors;
size = interceptors != null ? interceptors.length : 0;
}
}