package com.taobao.tddl.rule.utils; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; import com.taobao.tddl.rule.enumerator.Enumerator; import com.taobao.tddl.rule.enumerator.EnumeratorImp; import com.taobao.tddl.rule.model.AdvancedParameter; import com.taobao.tddl.rule.model.sqljep.Comparative; public class RuleUtils { private static final Enumerator enumerator = new EnumeratorImp(); public static void notNull(Object obj, String message) { if (obj == null) { throw new IllegalArgumentException(message); } } public static boolean isEmpty(Collection collection) { return collection == null || collection.isEmpty(); } public static boolean isNotEmpty(Collection collection) { return !isEmpty(collection); } public static boolean isEmpty(Map map) { return map == null || map.isEmpty(); } public static boolean isNotEmpty(Map map) { return !isEmpty(map); } /** * 返回对应column的枚举值 * * @param argumentsMap * @param param * @return */ public static Map<String, Set<Object>> getSamplingField(Map<String, Comparative> argumentsMap, Set<AdvancedParameter> param) { // 枚举以后的columns与他们的描点之间的对应关系 Map<String, Set<Object>> enumeratedMap = new HashMap<String, Set<Object>>(param.size()); for (AdvancedParameter entry : param) { String key = entry.key; // 当前enumerator中指定当前规则是否需要处理交集问题。 try { if (argumentsMap.containsKey(key)) { Set<Object> samplingField = enumerator.getEnumeratedValue(argumentsMap.get(key), entry.cumulativeTimes, entry.atomicIncreateValue, entry.needMergeValueInCloseInterval); enumeratedMap.put(key, samplingField); } else { // 如果sql中不存在,则进行全表扫 enumeratedMap.put(key, entry.enumerateRange()); } } catch (UnsupportedOperationException e) { throw new UnsupportedOperationException("当前列分库分表出现错误,出现错误的列名是:" + entry.key, e); } } return enumeratedMap; } public static <T> T cast(Object obj) { return (T) obj; } }