package com.idega.data.query; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Vector; 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; } public void write(Output out) { out.print("( ") .print(this.left) .print(' ') .print(this.operator) .print(' ') .print(this.right) .print(" )"); } public Set getTables(){ Set s = new HashSet(); s.addAll(this.left.getTables()); s.addAll(this.right.getTables()); return s; } public List getValues(){ Vector l = new Vector(); if(this.left instanceof PlaceHolder) { l.addAll(((PlaceHolder) this.left).getValues()); } if(this.right instanceof PlaceHolder) { l.addAll(((PlaceHolder)this.right).getValues()); } return l; } 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 getCriterias(){ Set s = new HashSet(); s.add(this.left); s.add(this.right); return s; } }