package com.idega.data.query;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.idega.data.query.output.Output;
/**
* See OR and AND
*
* @author <a href="mailto:joe@truemesh.com">Joe Walnes</a>
*/
public abstract class BaseLogicGroup extends Criteria implements PlaceHolder {
private String operator;
private Criteria left;
private Criteria right;
public BaseLogicGroup(String operator, Criteria left, Criteria right) {
this.left = left;
this.right = right;
this.operator = operator;
}
@Override
public void write(Output out) {
out.print("( ").print(this.left).print(' ').print(this.operator).print(' ').print(this.right).print(" )");
}
@Override
public Set<Table> getTables() {
Set<Table> s = new HashSet<Table>();
s.addAll(this.left.getTables());
s.addAll(this.right.getTables());
return s;
}
@Override
public List<Object> getValues() {
List<Object> l = new ArrayList<Object>();
if (this.left instanceof PlaceHolder) {
l.addAll(((PlaceHolder) this.left).getValues());
}
if (this.right instanceof PlaceHolder) {
l.addAll(((PlaceHolder) this.right).getValues());
}
return l;
}
@Override
public Object clone() {
BaseLogicGroup obj = (BaseLogicGroup) super.clone();
if (this.left != null) {
obj.left = (Criteria) this.left.clone();
}
if (this.right != null) {
obj.right = (Criteria) this.right.clone();
}
return obj;
}
public Set<Criteria> getCriterias() {
Set<Criteria> s = new HashSet<Criteria>();
s.add(this.left);
s.add(this.right);
return s;
}
}