Reorganizing code to easily support conditional and logical operators
This commit is contained in:
parent
e810a6c06d
commit
b339c9d49a
|
@ -20,6 +20,11 @@ import org.gcube.informationsystem.resourceregistry.contexts.security.SecurityCo
|
||||||
import org.gcube.informationsystem.resourceregistry.contexts.security.SecurityContext.PermissionMode;
|
import org.gcube.informationsystem.resourceregistry.contexts.security.SecurityContext.PermissionMode;
|
||||||
import org.gcube.informationsystem.resourceregistry.instances.base.ElementManagement;
|
import org.gcube.informationsystem.resourceregistry.instances.base.ElementManagement;
|
||||||
import org.gcube.informationsystem.resourceregistry.instances.base.ElementManagementUtility;
|
import org.gcube.informationsystem.resourceregistry.instances.base.ElementManagementUtility;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.JsonQueryERElement;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.entities.JsonQueryFacet;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.entities.JsonQueryResource;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.relations.JsonQueryConsistsOf;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.relations.JsonQueryIsRelatedTo;
|
||||||
import org.gcube.informationsystem.resourceregistry.types.CachedType;
|
import org.gcube.informationsystem.resourceregistry.types.CachedType;
|
||||||
import org.gcube.informationsystem.resourceregistry.types.TypesCache;
|
import org.gcube.informationsystem.resourceregistry.types.TypesCache;
|
||||||
import org.gcube.informationsystem.resourceregistry.utils.Utility;
|
import org.gcube.informationsystem.resourceregistry.utils.Utility;
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package org.gcube.informationsystem.resourceregistry.query.json;
|
package org.gcube.informationsystem.resourceregistry.query.json.base;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import org.gcube.informationsystem.base.reference.AccessType;
|
import org.gcube.informationsystem.base.reference.AccessType;
|
||||||
import org.gcube.informationsystem.base.reference.Direction;
|
import org.gcube.informationsystem.base.reference.Direction;
|
||||||
import org.gcube.informationsystem.base.reference.Element;
|
import org.gcube.informationsystem.base.reference.Element;
|
||||||
|
@ -26,18 +29,27 @@ public abstract class JsonQueryERElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected final ObjectMapper objectMapper;
|
||||||
protected final String type;
|
protected final String type;
|
||||||
protected final JsonNode jsonNode;
|
protected final JsonNode jsonNode;
|
||||||
protected final AccessType accessType;
|
protected final AccessType accessType;
|
||||||
|
|
||||||
|
protected final Set<String> fieldNamesToRemove;
|
||||||
|
|
||||||
protected Direction direction;
|
protected Direction direction;
|
||||||
protected boolean entryPoint;
|
protected boolean entryPoint;
|
||||||
|
|
||||||
public JsonQueryERElement(JsonNode jsonQuery, AccessType accessType) throws SchemaException, ResourceRegistryException {
|
public JsonQueryERElement(JsonNode jsonQuery, AccessType accessType) throws SchemaException, ResourceRegistryException {
|
||||||
|
this.objectMapper = new ObjectMapper();
|
||||||
this.type = jsonQuery.get(Element.CLASS_PROPERTY).asText();
|
this.type = jsonQuery.get(Element.CLASS_PROPERTY).asText();
|
||||||
this.jsonNode = jsonQuery;
|
this.jsonNode = jsonQuery;
|
||||||
this.accessType = accessType;
|
this.accessType = accessType;
|
||||||
this.entryPoint = false;
|
this.entryPoint = false;
|
||||||
|
|
||||||
|
this.fieldNamesToRemove = new HashSet<>();
|
||||||
|
fieldNamesToRemove.add(Element.CLASS_PROPERTY);
|
||||||
|
fieldNamesToRemove.add(Element.SUPERCLASSES_PROPERTY);
|
||||||
|
|
||||||
validateType(this.type, this.accessType);
|
validateType(this.type, this.accessType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,11 +73,15 @@ public abstract class JsonQueryERElement {
|
||||||
this.entryPoint = entryPoint;
|
this.entryPoint = entryPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract StringBuffer analize(StringBuffer stringBuffer) throws SchemaNotFoundException, InvalidQueryException, SchemaException, ResourceRegistryException;
|
public abstract StringBuffer analize(StringBuffer stringBuffer) throws SchemaNotFoundException, InvalidQueryException, SchemaException, ResourceRegistryException;
|
||||||
|
|
||||||
|
|
||||||
protected StringBuffer addWhereConstraint(JsonNode jsonNode, StringBuffer stringBuffer, String fieldNamePrefix) throws InvalidQueryException {
|
protected StringBuffer addWhereConstraint(JsonNode jsonNode, StringBuffer stringBuffer, String fieldNamePrefix) throws InvalidQueryException {
|
||||||
Iterator<String> iterator = jsonNode.fieldNames();
|
Iterator<String> iterator = jsonNode.fieldNames();
|
||||||
|
|
||||||
|
// ObjectNode objectNode = jsonNode.deepCopy();
|
||||||
|
//objectNode.remove(fieldNames);
|
||||||
|
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
|
|
||||||
while(iterator.hasNext()) {
|
while(iterator.hasNext()) {
|
||||||
|
@ -101,22 +117,76 @@ public abstract class JsonQueryERElement {
|
||||||
stringBuffer.append(" AND ");
|
stringBuffer.append(" AND ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if(QueryLogicalOperator.getOperators().contains(fieldName)) {
|
||||||
|
// QueryLogicalOperator queryLogicalOperator = QueryLogicalOperator.getQueryLogicalOperator(fieldName);
|
||||||
|
// stringBuffer.append(queryLogicalOperator.getLogicalOperator());
|
||||||
|
// }
|
||||||
|
|
||||||
stringBuffer.append(getNameValueToMatch(jsonNode, fieldName, fieldNamePrefix));
|
stringBuffer.append(getNameValueToMatch(jsonNode, fieldName, fieldNamePrefix));
|
||||||
}
|
}
|
||||||
|
|
||||||
return stringBuffer;
|
return stringBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private StringBuffer getNameValueToMatch(JsonNode jsonNode, String fieldName, String fieldNamePrefix) throws InvalidQueryException {
|
private StringBuffer getExpression(String fieldName, JsonNode jsonNode, String fieldNamePrefix) throws InvalidQueryException {
|
||||||
StringBuffer stringBuffer = new StringBuffer();
|
StringBuffer stringBuffer = new StringBuffer();
|
||||||
|
|
||||||
|
|
||||||
JsonNode gotJoJsonNode = jsonNode.get(fieldName);
|
JsonNode gotJoJsonNode = jsonNode.get(fieldName);
|
||||||
|
|
||||||
if(gotJoJsonNode.isContainerNode()) {
|
if(gotJoJsonNode.isContainerNode()) {
|
||||||
|
|
||||||
if(gotJoJsonNode.isArray()) {
|
if(gotJoJsonNode.isArray()) {
|
||||||
throw new InvalidQueryException("Array not supported for " + fieldName);
|
throw new InvalidQueryException("Array not supported for " + fieldName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gotJoJsonNode.isObject()) {
|
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);
|
||||||
|
return addWhereConstraint(gotJoJsonNode, stringBuffer, newPrefix.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
addNameToCompare(stringBuffer, fieldName, fieldNamePrefix);
|
||||||
|
String value = jsonNode.get(fieldName).asText();
|
||||||
|
addValueToMatch(stringBuffer, gotJoJsonNode, value);
|
||||||
|
|
||||||
|
return stringBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private StringBuffer getNameValueToMatch(JsonNode jsonNode, String fieldName, String fieldNamePrefix) throws InvalidQueryException {
|
||||||
|
StringBuffer stringBuffer = new StringBuffer();
|
||||||
|
|
||||||
|
|
||||||
|
JsonNode gotJoJsonNode = jsonNode.get(fieldName);
|
||||||
|
|
||||||
|
if(gotJoJsonNode.isContainerNode()) {
|
||||||
|
|
||||||
|
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();
|
StringBuffer newPrefix = new StringBuffer();
|
||||||
if(fieldNamePrefix!=null) {
|
if(fieldNamePrefix!=null) {
|
||||||
newPrefix.append(fieldNamePrefix);
|
newPrefix.append(fieldNamePrefix);
|
|
@ -0,0 +1,57 @@
|
||||||
|
package org.gcube.informationsystem.resourceregistry.query.json.base;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
|
*/
|
||||||
|
public enum QueryConditionalOperator {
|
||||||
|
|
||||||
|
$EQ("$eq", " = ", "Matches values that are equal to a specified value."),
|
||||||
|
$GT("$gt", " > ", "Matches values that are greater than a specified value."),
|
||||||
|
$GTE("$gte", " >= ", "Matches values that are greater than or equal to a specified value."),
|
||||||
|
$LT("$lt", " < ", "Matches values that are less than a specified value."),
|
||||||
|
$LTE("$lte", " <= ", "Matches values that are less than or equal to a specified value."),
|
||||||
|
$NE("$ne", " <> ", "Matches all values that are not equal to a specified value."),
|
||||||
|
|
||||||
|
$IN("$in", " IN ", "Matches any of the values specified in an array.");
|
||||||
|
|
||||||
|
protected final String operator;
|
||||||
|
protected final String conditionalOperator;
|
||||||
|
protected final String description;
|
||||||
|
|
||||||
|
private QueryConditionalOperator(String operator, String conditionalOperator, String description) {
|
||||||
|
this.operator = operator;
|
||||||
|
this.conditionalOperator = conditionalOperator;
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static Set<String> operators;
|
||||||
|
private static Map<String,QueryConditionalOperator> operatorByKey;
|
||||||
|
|
||||||
|
static {
|
||||||
|
QueryConditionalOperator.operators = new HashSet<>();
|
||||||
|
QueryConditionalOperator.operatorByKey = new HashMap<>();
|
||||||
|
|
||||||
|
for(QueryConditionalOperator queryComparisonOperator : QueryConditionalOperator.values()) {
|
||||||
|
QueryConditionalOperator.operators.add(queryComparisonOperator.getOperator());
|
||||||
|
QueryConditionalOperator.operatorByKey.put(queryComparisonOperator.getOperator(), queryComparisonOperator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set<String> getOperators() {
|
||||||
|
return QueryConditionalOperator.operators;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static QueryConditionalOperator getQueryComparisonOperator(String key) {
|
||||||
|
return operatorByKey.get(key);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
package org.gcube.informationsystem.resourceregistry.query.json.base;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
|
*/
|
||||||
|
public enum QueryLogicalOperator {
|
||||||
|
|
||||||
|
$AND("$and", " AND ", "true if both the conditions are true"),
|
||||||
|
$OR("$or", " OR ", "true if at least one of the condition is true"),
|
||||||
|
$NOT("$not", " NOT ", "true if the condition is false.");
|
||||||
|
|
||||||
|
protected final String operator;
|
||||||
|
protected final String logicalOperator;
|
||||||
|
protected final String description;
|
||||||
|
|
||||||
|
private QueryLogicalOperator(String operator, String logicalOperator, String description) {
|
||||||
|
this.operator = operator;
|
||||||
|
this.logicalOperator = logicalOperator;
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLogicalOperator() {
|
||||||
|
return logicalOperator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Set<String> operators;
|
||||||
|
private static Map<String,QueryLogicalOperator> operatorByKey;
|
||||||
|
|
||||||
|
static {
|
||||||
|
QueryLogicalOperator.operators = new HashSet<>();
|
||||||
|
QueryLogicalOperator.operatorByKey = new HashMap<>();
|
||||||
|
|
||||||
|
for(QueryLogicalOperator queryLogicalOperator : QueryLogicalOperator.values()) {
|
||||||
|
QueryLogicalOperator.operators.add(queryLogicalOperator.getOperator());
|
||||||
|
QueryLogicalOperator.operatorByKey.put(queryLogicalOperator.getOperator(), queryLogicalOperator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set<String> getOperators() {
|
||||||
|
return QueryLogicalOperator.operators;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static QueryLogicalOperator getQueryLogicalOperator(String key) {
|
||||||
|
return operatorByKey.get(key);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package org.gcube.informationsystem.resourceregistry.query.json;
|
package org.gcube.informationsystem.resourceregistry.query.json.base.entities;
|
||||||
|
|
||||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||||
import org.gcube.informationsystem.base.reference.AccessType;
|
import org.gcube.informationsystem.base.reference.AccessType;
|
||||||
|
@ -6,6 +6,8 @@ import org.gcube.informationsystem.base.reference.Direction;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.query.InvalidQueryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.query.InvalidQueryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.JsonQueryERElement;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.relations.JsonQueryConsistsOf;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Luca Frosini (ISTI - CNR)
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
|
@ -19,7 +21,7 @@ public class JsonQueryFacet extends JsonQueryERElement{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException {
|
public StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException {
|
||||||
StringBuffer newBuffer = new StringBuffer();
|
StringBuffer newBuffer = new StringBuffer();
|
||||||
|
|
||||||
boolean entry = entryPoint;
|
boolean entry = entryPoint;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.gcube.informationsystem.resourceregistry.query.json;
|
package org.gcube.informationsystem.resourceregistry.query.json.base.entities;
|
||||||
|
|
||||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||||
import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode;
|
import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
@ -8,6 +8,9 @@ import org.gcube.informationsystem.base.reference.IdentifiableElement;
|
||||||
import org.gcube.informationsystem.model.reference.entities.Resource;
|
import org.gcube.informationsystem.model.reference.entities.Resource;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.JsonQueryERElement;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.relations.JsonQueryConsistsOf;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.relations.JsonQueryIsRelatedTo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Luca Frosini (ISTI - CNR)
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
|
@ -19,7 +22,7 @@ public class JsonQueryResource extends JsonQueryERElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException {
|
public StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException {
|
||||||
if(!entryPoint) {
|
if(!entryPoint) {
|
||||||
StringBuffer newBuffer = new StringBuffer();
|
StringBuffer newBuffer = new StringBuffer();
|
||||||
newBuffer.append("TRAVERSE ");
|
newBuffer.append("TRAVERSE ");
|
|
@ -1,4 +1,4 @@
|
||||||
package org.gcube.informationsystem.resourceregistry.query.json;
|
package org.gcube.informationsystem.resourceregistry.query.json.base.relations;
|
||||||
|
|
||||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||||
import org.gcube.informationsystem.base.reference.AccessType;
|
import org.gcube.informationsystem.base.reference.AccessType;
|
||||||
|
@ -6,11 +6,13 @@ import org.gcube.informationsystem.base.reference.Direction;
|
||||||
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.entities.JsonQueryFacet;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.entities.JsonQueryResource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Luca Frosini (ISTI - CNR)
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
*/
|
*/
|
||||||
public class JsonQueryConsistsOf extends JsonQueryERElement{
|
public class JsonQueryConsistsOf extends JsonQueryRelation {
|
||||||
|
|
||||||
protected String requestedResourceType;
|
protected String requestedResourceType;
|
||||||
|
|
||||||
|
@ -28,7 +30,7 @@ public class JsonQueryConsistsOf extends JsonQueryERElement{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException {
|
public StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException {
|
||||||
StringBuffer consistsOfBuffer = new StringBuffer();
|
StringBuffer consistsOfBuffer = new StringBuffer();
|
||||||
|
|
||||||
if(!jsonNode.has(ConsistsOf.SOURCE_PROPERTY)) {
|
if(!jsonNode.has(ConsistsOf.SOURCE_PROPERTY)) {
|
|
@ -1,4 +1,4 @@
|
||||||
package org.gcube.informationsystem.resourceregistry.query.json;
|
package org.gcube.informationsystem.resourceregistry.query.json.base.relations;
|
||||||
|
|
||||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||||
import org.gcube.informationsystem.base.reference.AccessType;
|
import org.gcube.informationsystem.base.reference.AccessType;
|
||||||
|
@ -7,11 +7,12 @@ import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.query.InvalidQueryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.query.InvalidQueryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.entities.JsonQueryResource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Luca Frosini (ISTI - CNR)
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
*/
|
*/
|
||||||
public class JsonQueryIsRelatedTo extends JsonQueryERElement{
|
public class JsonQueryIsRelatedTo extends JsonQueryRelation {
|
||||||
|
|
||||||
protected String requestedResourceType;
|
protected String requestedResourceType;
|
||||||
|
|
||||||
|
@ -73,8 +74,7 @@ public class JsonQueryIsRelatedTo extends JsonQueryERElement{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException {
|
public StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException {
|
||||||
|
|
||||||
|
|
||||||
JsonNode sourceJsonNode = jsonNode.get(ConsistsOf.SOURCE_PROPERTY);
|
JsonNode sourceJsonNode = jsonNode.get(ConsistsOf.SOURCE_PROPERTY);
|
||||||
JsonNode targetJsonNode = jsonNode.get(ConsistsOf.TARGET_PROPERTY);
|
JsonNode targetJsonNode = jsonNode.get(ConsistsOf.TARGET_PROPERTY);
|
|
@ -0,0 +1,21 @@
|
||||||
|
package org.gcube.informationsystem.resourceregistry.query.json.base.relations;
|
||||||
|
|
||||||
|
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import org.gcube.informationsystem.base.reference.AccessType;
|
||||||
|
import org.gcube.informationsystem.model.reference.relations.Relation;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.json.base.JsonQueryERElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
|
*/
|
||||||
|
public abstract class JsonQueryRelation extends JsonQueryERElement {
|
||||||
|
|
||||||
|
public JsonQueryRelation(JsonNode jsonQuery, AccessType accessType) throws SchemaException, ResourceRegistryException {
|
||||||
|
super(jsonQuery, accessType);
|
||||||
|
fieldNamesToRemove.add(Relation.TARGET_PROPERTY);
|
||||||
|
fieldNamesToRemove.add(Relation.SOURCE_PROPERTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -54,7 +54,7 @@ public class JsonQueryTest extends ContextTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info("Expected Query from JSON: {}", createdStringBuffer.toString());
|
logger.info("Expected Query from JSON: {}", expectedStringBuffer.toString());
|
||||||
|
|
||||||
Assert.assertTrue(createdStringBuffer.toString().compareTo(expectedStringBuffer.toString())==0);
|
Assert.assertTrue(createdStringBuffer.toString().compareTo(expectedStringBuffer.toString())==0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue