diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/query/json/base/JsonQueryERElement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/query/json/base/JsonQueryERElement.java index bebf110..374a15e 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/query/json/base/JsonQueryERElement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/query/json/base/JsonQueryERElement.java @@ -97,53 +97,49 @@ public abstract class JsonQueryERElement { stringBuffer.append(queryLogicalOperator.getLogicalOperator()); } - if(QueryLogicalOperator.getOperators().contains(fieldName)) { - QueryLogicalOperator innnerQueryLogicalOperator = QueryLogicalOperator.getQueryLogicalOperator(fieldName); - JsonNode node = objectNode.get(fieldName); - stringBuffer.append(addConstraint(node, innnerQueryLogicalOperator, fieldNamePrefix)); - }else { - stringBuffer.append(getNameValueToMatch(objectNode, fieldName, fieldNamePrefix)); - } + JsonNode node = objectNode.get(fieldName); + stringBuffer.append(evaluateNode(node, fieldName, fieldNamePrefix)); } return stringBuffer; } - private StringBuffer getNameValueToMatch(JsonNode jsonNode, String fieldName, String fieldNamePrefix) throws InvalidQueryException { + + protected StringBuffer evaluateNode(JsonNode jsonNode, String fieldName, String fieldNamePrefix) throws InvalidQueryException { StringBuffer stringBuffer = new StringBuffer(); - JsonNode gotJoJsonNode = jsonNode.get(fieldName); + if(QueryLogicalOperator.getOperators().contains(fieldName)) { + QueryLogicalOperator queryLogicalOperator = QueryLogicalOperator.getQueryLogicalOperator(fieldName); + stringBuffer.append(addConstraint(jsonNode, queryLogicalOperator, fieldNamePrefix)); + return stringBuffer; + } - if(gotJoJsonNode.isContainerNode()) { + if(QueryConditionalOperator.getOperators().contains(fieldName)) { + QueryConditionalOperator queryConditionalOperator = QueryConditionalOperator.getQueryComparisonOperator(fieldName); - if(gotJoJsonNode.isArray()) { - throw new InvalidQueryException("Array not supported for " + fieldName); - } - - if(gotJoJsonNode.isObject()) { - - for(QueryConditionalOperator queryComparisonOperator : QueryConditionalOperator.values()) { - if(gotJoJsonNode.has(queryComparisonOperator.operator)) { - // TODO - } - } - - StringBuffer newPrefix = new StringBuffer(); - if(fieldNamePrefix!=null) { - newPrefix.append(fieldNamePrefix); - newPrefix.append("."); - } - newPrefix.append(fieldName); - - stringBuffer.append(addConstraint(gotJoJsonNode, null, newPrefix.toString())); - return stringBuffer; - } - - } + } - addNameToCompare(stringBuffer, fieldName, fieldNamePrefix); - String value = jsonNode.get(fieldName).asText(); - addValueToMatch(stringBuffer, gotJoJsonNode, value); + if(jsonNode.isArray()) { + return stringBuffer; + } + + if(jsonNode.isObject()) { + StringBuffer newPrefix = new StringBuffer(); + if(fieldNamePrefix!=null) { + newPrefix.append(fieldNamePrefix); + newPrefix.append("."); + } + newPrefix.append(fieldName); + + stringBuffer.append(addConstraint(jsonNode, null, newPrefix.toString())); + return stringBuffer; + } + + if(jsonNode.isTextual() || jsonNode.isNumber()) { + addNameToCompare(stringBuffer, fieldName, fieldNamePrefix); + String value = jsonNode.asText(); + addValueToMatch(stringBuffer, jsonNode, value); + } return stringBuffer; }