package com.meidusa.amoeba.sqljep.function; import java.util.Comparator; /** * �����Ƿ���ڽ����ļ��� * @author <a href=mailto:piratebase@sina.com>Struct chen</a> * */ @SuppressWarnings("unchecked") public class Intersector { public static int doComparator(Comparable source,Comparable target,Comparator comparator){ if(comparator == null){ return source.compareTo(target); }else{ return comparator.compare(source, target); } } private static boolean like(Comparable<?> param1, Comparable<?> param2){ return Like.like(param1, param2); } public static boolean intersect(int sourceFunction,Comparable source, int targetFunction ,Comparable target,Comparator comparator) { switch(sourceFunction){ case Comparative.Equivalent:{ switch(targetFunction){ case Comparative.Equivalent:{ return doComparator(source,target,comparator) == 0; } case Comparative.GreaterThan:{ return doComparator(source,target,comparator)>0; } case Comparative.GreaterThanOrEqual:{ return doComparator(source,target,comparator)>=0; } case Comparative.LessThan:{ return doComparator(source,target,comparator)<0; } case Comparative.LessThanOrEqual:{ return doComparator(source,target,comparator)<=0; } case Comparative.NotEquivalent:{ return doComparator(source,target,comparator) !=0; } case Comparative.Like : { return like(source,target); }case Comparative.NotLike :{ return !like(source,target); } } } case Comparative.GreaterThan:{ switch(targetFunction){ case Comparative.Equivalent:{ return doComparator(source,target,comparator)< 0; } case Comparative.GreaterThan:{ return true; } case Comparative.GreaterThanOrEqual:{ return true; } case Comparative.LessThan:{ return doComparator(source,target,comparator)<0; } case Comparative.LessThanOrEqual:{ return doComparator(source,target,comparator)<0; } case Comparative.NotEquivalent:{ return true; } } } case Comparative.GreaterThanOrEqual:{ switch(targetFunction){ case Comparative.Equivalent:{ return doComparator(source,target,comparator)<= 0; } case Comparative.GreaterThan:{ return true; } case Comparative.GreaterThanOrEqual:{ return true; } case Comparative.LessThan:{ return doComparator(source,target,comparator)<0; } case Comparative.LessThanOrEqual:{ return doComparator(source,target,comparator)<=0; } case Comparative.NotEquivalent:{ return true; } } } case Comparative.LessThan:{ switch(targetFunction){ case Comparative.Equivalent:{ return doComparator(source,target,comparator)> 0; } case Comparative.GreaterThan:{ return doComparator(source,target,comparator)> 0; } case Comparative.GreaterThanOrEqual:{ return doComparator(source,target,comparator)> 0; } case Comparative.LessThan:{ return true; } case Comparative.LessThanOrEqual:{ return true; } case Comparative.NotEquivalent:{ return true; } } } case Comparative.LessThanOrEqual:{ switch(targetFunction){ case Comparative.Equivalent:{ return doComparator(source,target,comparator)>= 0; } case Comparative.GreaterThan:{ return doComparator(source,target,comparator)> 0; } case Comparative.GreaterThanOrEqual:{ return doComparator(source,target,comparator)>= 0; } case Comparative.LessThan:{ return true; } case Comparative.LessThanOrEqual:{ return true; } case Comparative.NotEquivalent:{ return true; } } } case Comparative.NotEquivalent:{ switch(targetFunction){ case Comparative.Equivalent:{ return doComparator(source,target,comparator)!= 0; } case Comparative.GreaterThan:{ return true; } case Comparative.GreaterThanOrEqual:{ return true; } case Comparative.LessThan:{ return true; } case Comparative.LessThanOrEqual:{ return true; } case Comparative.NotEquivalent:{ return true; } } } case Comparative.Like:{ switch(targetFunction){ case Comparative.Equivalent:{ return like(source,target); } case Comparative.Like:{ return like(source,target); } case Comparative.NotLike:{ return !like(source,target); } } } } return false; } }