package org.opencloudb.route.function;
import org.opencloudb.config.model.rule.RuleAlgorithm;
/**
* 路由分片函数抽象类
* 为了实现一个默认的支持范围分片的函数 calcualteRange
* 重写它以实现自己的范围路由规则
* @author lxy
*
*/
public abstract class AbstractPartionAlgorithm implements RuleAlgorithm {
@Override
public void init() {
}
/**
* 返回所有被路由到的节点的编号
* 返回长度为0的数组表示所有节点都被路由(默认)
* 返回null表示没有节点被路由到
*/
@Override
public Integer[] calculateRange(String beginValue, String endValue) {
return new Integer[0];
}
/**
* 对于存储数据按顺序存放的字段做范围路由,可以使用这个函数
* @param algorithm
* @param beginValue
* @param endValue
* @return
*/
public static Integer[] calculateSequenceRange(AbstractPartionAlgorithm algorithm, String beginValue, String endValue) {
Integer begin = 0, end = 0;
begin = algorithm.calculate(beginValue);
end = algorithm.calculate(endValue);
if(begin == null || end == null){
return new Integer[0];
}
if (end >= begin) {
int len = end-begin+1;
Integer [] re = new Integer[len];
for(int i =0;i<len;i++){
re[i]=begin+i;
}
return re;
}else{
return null;
}
}
}