package org.teiid.resource.adapter.coherence;
import java.util.Iterator;
import java.util.List;
import org.teiid.core.BundleUtil;
import org.teiid.language.Comparison;
import org.teiid.translator.TranslatorException;
import com.tangosol.util.Filter;
import com.tangosol.util.QueryHelper;
/**
*
* @author vhalbert
*
* TODO: add the LimitFilter
*/
public class CoherenceFilterUtil {
public static final BundleUtil UTIL = BundleUtil.getBundleUtil(CoherenceFilterUtil.class);
public static Filter createFilter(String filterString) throws TranslatorException {
return QueryHelper.createFilter(filterString);
}
public static Filter createInFilter(String colName, List<Object> parms, Class<?> type) throws TranslatorException {
String parm = null;
for (Iterator<Object> it = parms.iterator(); it.hasNext();) {
Object t = it.next();
if (parm != null) {
parm += ",";
}
if(type == String.class) {
parm = (String) t;
} else if (type == Long.class) {
parm = String.valueOf(t + "l");
} else {
parm = t.toString();
}
}
String filterString = colName + " in (" + parm + ")";
return QueryHelper.createFilter(filterString);
}
public static Filter createCompareFilter(String colName, Object parm, Comparison.Operator op, Class<?> type) throws TranslatorException {
String parmValue = null;
if(type == String.class) {
parmValue = (String) parm;
} else if (type == Long.class) {
parmValue = String.valueOf(parm + "l");
} else {
parmValue = parm.toString();
}
String opString = " = ";
switch(op) {
case NE:
case EQ:
break;
case GT:
opString = " > ";
break;
case GE:
opString = " >= ";
break;
case LT:
opString = " < ";
break;
case LE:
opString = " <= ";
break;
default:
final String msg = UTIL.getString("CoherenceVisitor.criteriaNotSupportedError");
throw new TranslatorException(msg);
}
String filterString = colName + opString + parmValue ;
return QueryHelper.createFilter(filterString);
}
}