package com.meidusa.amoeba.sqljep.function;
import java.util.Comparator;
@SuppressWarnings("unchecked")
public class Comparative implements Comparable ,Cloneable{
public static final int GreaterThan = 1;
public static final int GreaterThanOrEqual = 2;
public static final int Equivalent = 3;
public static final int Like = 4;
public static final int NotLike = 5;
public static final int NotEquivalent = 6;
public static final int LessThan = 7;
public static final int LessThanOrEqual = 8;
/**
* ���ʽȡ��
* @param function
* @return
*/
public static int reverseComparison(int function){
return 9-function;
}
/**
* ���ʽǰ��λ�õ�����ʱ��
* @param function
* @return
*/
public static int exchangeComparison(int function){
if(function == GreaterThan){
return LessThan;
}else if(function == GreaterThanOrEqual){
return LessThanOrEqual;
}else if(function == LessThan){
return GreaterThan;
} if(function == LessThanOrEqual){
return GreaterThanOrEqual;
}else{
return function;
}
}
private Comparable value;
private int comparison;
protected Comparative(){
}
public Comparative(int function,Comparable value){
this.comparison = function;
this.value = value;
}
public Comparable getValue(){
return value;
}
public void setComparison(int function){
this.comparison = function;
}
public static String getComparisonName(int function){
if(function == Equivalent){
return "=";
}else if(function == GreaterThan){
return ">";
}else if(function == GreaterThanOrEqual){
return ">=";
}else if(function == LessThanOrEqual){
return "<=";
}else if(function == LessThan){
return "<";
}else if(function == NotEquivalent){
return "<>";
}else if(function == Like){
return "LIKE";
}else if(function == NotLike){
return "NOT LIKE";
}else{
return null;
}
}
public static int getComparisonByIdent(String ident){
if("=".equals(ident)){
return Equivalent;
}else if(">".equals(ident)){
return GreaterThan;
}else if(">=".equals(ident)){
return GreaterThanOrEqual;
}else if("<=".equals(ident)){
return LessThanOrEqual;
}else if("<".equals(ident)){
return LessThan;
}else if("!=".equals(ident)){
return NotEquivalent;
}else if("<>".equals(ident)){
return NotEquivalent;
}else if("like".equalsIgnoreCase(ident)){
return Like;
}else{
return -1;
}
}
public int getComparison(){
return comparison;
}
public void setValue(Comparable value){
this.value = value;
}
public int compareTo(Object o) {
if(o instanceof Comparative){
Comparative other = (Comparative)o;
return this.getValue().compareTo(other.getValue());
}else if(o instanceof Comparable){
return this.getValue().compareTo(o);
}
return -1;
}
public boolean intersect(int function,Comparable other,Comparator comparator){
return Intersector.intersect(function,other,this.comparison,this.getValue(),comparator);
}
public boolean intersect(Comparative other,Comparator comparator){
return other.intersect(this.comparison, this.getValue(), comparator);
}
public String toString(){
return getComparisonName(this.comparison)+this.value;
}
public Object clone(){
return new Comparative(this.comparison,this.value);
}
}