package com.taobao.tddl.rule.model.sqljep;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;
import com.taobao.tddl.common.utils.logger.Logger;
import com.taobao.tddl.common.utils.logger.LoggerFactory;
/**
* Comparative List,作用是持有多个Comparative,是对and 节点和or节点的一种公共抽象。
*
* @author shenxun
*/
public abstract class ComparativeBaseList extends Comparative {
private static final Logger logger = LoggerFactory.getLogger(ComparativeBaseList.class);
protected List<Comparative> list = new ArrayList<Comparative>(2);
public ComparativeBaseList(int function, Comparable<?> value){
super(function, value);
list.add(new Comparative(function, value));
}
protected ComparativeBaseList(){
super();
}
public ComparativeBaseList(int capacity){
super();
list = new ArrayList<Comparative>(capacity);
}
public ComparativeBaseList(Comparative item){
super(item.getComparison(), item.getValue());
list.add(item);
}
public List<Comparative> getList() {
return list;
}
public void addComparative(Comparative item) {
this.list.add(item);
}
public Object clone() {
try {
Constructor<? extends ComparativeBaseList> con = this.getClass().getConstructor((Class[]) null);
ComparativeBaseList compList = con.newInstance((Object[]) null);
for (Comparative com : list) {
compList.addComparative((Comparative) com.clone());
}
compList.setComparison(this.getComparison());
compList.setValue(this.getValue());
return compList;
} catch (Exception e) {
logger.error(e);
return null;
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
boolean firstElement = true;
for (Comparative comp : list) {
if (!firstElement) {
sb.append(getRelation());
}
sb.append(comp.toString());
firstElement = false;
}
return sb.toString();
}
abstract protected String getRelation();
}