public void translateSearchCriterionToFormField(SearchCriterion criterion, List<AdvancedFormFieldCondition> advancedForm, BooleanCriterion parent, SearchScheme scheme) {
if (criterion instanceof BooleanCriterion) {
BooleanCriterion bc = (BooleanCriterion)criterion;
boolean firstChild = true;
for (SearchCriterion subcriterion : bc.getCriteria()) {
translateSearchCriterionToFormField(subcriterion, advancedForm, bc, scheme);
if (firstChild && parent != null && bc.getOperator() == SearchOperator.OR) {
advancedForm.get(advancedForm.size()-1).setOperator(AdvancedFormFieldCondition.OR_OPERATOR);
} else if (firstChild && parent != null) {
advancedForm.get(advancedForm.size()-1).setOperator(AdvancedFormFieldCondition.AND_OPERATOR);
}
firstChild = false;
}
} else if (criterion instanceof FieldCriterion) {
FieldCriterion fieldCriterion = (FieldCriterion)criterion;
String presentationFieldName = getPresentationFieldName(scheme, fieldCriterion.getField());
advancedForm.add(new AdvancedFormFieldCondition(translateSearchOperator(fieldCriterion.getOperator(), parent), presentationFieldName, fieldCriterion.getValue()));
} else if (criterion instanceof FieldRangeCriterion) {
FieldRangeCriterion fieldRangeCriterion = (FieldRangeCriterion)criterion;
String presentationFieldName = getPresentationFieldName(scheme, fieldRangeCriterion.getField());
advancedForm.add(new AdvancedFormFieldCondition(translateSearchOperator(fieldRangeCriterion.getOperator(), parent), presentationFieldName, new String[] {fieldRangeCriterion.getFrom(), fieldRangeCriterion.getTo()}));
}
}