init(em);
}
private Boolean appendCondition(Class tClass, StringBuilder sb, String field, String comparator, String param) {
comparator = comparator.toLowerCase();
AnnotationInfo ai = em.getAnnotationManager().getAnnotationInfo(tClass);
String fieldSplit[] = field.split("\\.");
if (fieldSplit.length == 1) {
field = fieldSplit[0];
// System.out.println("split: " + field + " param=" + param);
if (field.equals(param)) {
return false;
}
} else if (fieldSplit.length == 2) {
field = fieldSplit[1];
} else if (fieldSplit.length == 3) {
// NOTE: ONLY SUPPORTING SECOND LEVEL OF GRAPH RIGHT NOW
// then we have to reach down the graph here. eg: myOb.ob2.name or myOb.ob2.id
// if filtering by id, then don't need to query for second object, just add a filter on the id field
String refObjectField = fieldSplit[1];
field = fieldSplit[2];
// System.out.println("field=" + field);
Method getterForReference = ai.getGetter(refObjectField);
Class refType = getterForReference.getReturnType();
AnnotationInfo refAi = em.getAnnotationManager().getAnnotationInfo(refType);
Method getterForField = refAi.getGetter(field);
// System.out.println("getter=" + getterForField);
String paramValue = getParamValueAsStringForAmazonQuery(param, getterForField);
logger.finest("paramValue=" + paramValue);
Method refIdMethod = refAi.getIdMethod();
if (NamingHelper.attributeName(refIdMethod).equals(field)) {
logger.finer("Querying using id field, no second query required.");
appendFilter(sb, NamingHelper.foreignKey(refObjectField), comparator, paramValue);
} else {
// no id method, so query for other object(s) first, then apply the returned value to the original query.