Fixed JSONquery for IsRelatedTo indicating both source and target
resources #24264
This commit is contained in:
parent
1235341295
commit
fd1d9673b3
|
@ -1,9 +1,10 @@
|
|||
package org.gcube.informationsystem.resourceregistry.queries.json.base.relations;
|
||||
|
||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.gcube.informationsystem.base.reference.AccessType;
|
||||
import org.gcube.informationsystem.base.reference.Direction;
|
||||
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
|
||||
import org.gcube.informationsystem.model.reference.relations.IsRelatedTo;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.queries.InvalidQueryException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaException;
|
||||
|
@ -32,7 +33,19 @@ public class JsonQueryIsRelatedTo extends JsonQueryRelation {
|
|||
StringBuffer buffer = new StringBuffer();
|
||||
|
||||
int size = jsonNode.size();
|
||||
if(size > 2) {
|
||||
|
||||
// Remove @class from size
|
||||
--size;
|
||||
|
||||
if(jsonNode.has(IsRelatedTo.SOURCE_PROPERTY)) {
|
||||
--size;
|
||||
}
|
||||
|
||||
if(jsonNode.has(IsRelatedTo.TARGET_PROPERTY)) {
|
||||
--size;
|
||||
}
|
||||
|
||||
if(size > 0) {
|
||||
buffer.append("SELECT FROM ");
|
||||
if(entryPoint) {
|
||||
buffer.append(type);
|
||||
|
@ -60,8 +73,8 @@ public class JsonQueryIsRelatedTo extends JsonQueryRelation {
|
|||
|
||||
stringBuffer = buffer;
|
||||
|
||||
// Size 2 means that only '@class' and 'target'/'source' properties are present
|
||||
if(size > 2) {
|
||||
// Size 0 means that only '@class' and 'target'/'source' properties are present
|
||||
if(size > 0) {
|
||||
if(!entryPoint) {
|
||||
stringBuffer.append(" )"); // Close ) SELECT
|
||||
}
|
||||
|
@ -75,8 +88,8 @@ public class JsonQueryIsRelatedTo extends JsonQueryRelation {
|
|||
@Override
|
||||
public StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException {
|
||||
|
||||
JsonNode sourceJsonNode = jsonNode.get(ConsistsOf.SOURCE_PROPERTY);
|
||||
JsonNode targetJsonNode = jsonNode.get(ConsistsOf.TARGET_PROPERTY);
|
||||
JsonNode sourceJsonNode = jsonNode.get(IsRelatedTo.SOURCE_PROPERTY);
|
||||
JsonNode targetJsonNode = jsonNode.get(IsRelatedTo.TARGET_PROPERTY);
|
||||
|
||||
JsonNode resourceJsonNode = null;
|
||||
|
||||
|
@ -96,11 +109,13 @@ public class JsonQueryIsRelatedTo extends JsonQueryRelation {
|
|||
stringBuffer = jsonQueryResource.analize(stringBuffer);
|
||||
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("TRAVERSE ");
|
||||
buffer.append(direction.opposite().name().toLowerCase());
|
||||
buffer.append("V(\"");
|
||||
buffer.append(requestedResourceType);
|
||||
buffer.append("\") FROM ( ");
|
||||
if(!entryPoint) {
|
||||
buffer.append("TRAVERSE ");
|
||||
buffer.append(direction.opposite().name().toLowerCase());
|
||||
buffer.append("V(\"");
|
||||
buffer.append(requestedResourceType);
|
||||
buffer.append("\") FROM ( ");
|
||||
}
|
||||
buffer.append("TRAVERSE ");
|
||||
buffer.append(direction.name().toLowerCase());
|
||||
buffer.append("E(\"");
|
||||
|
@ -108,9 +123,26 @@ public class JsonQueryIsRelatedTo extends JsonQueryRelation {
|
|||
buffer.append("\") FROM ( ");
|
||||
buffer.append(stringBuffer);
|
||||
buffer.append(")");
|
||||
buffer.append(")");
|
||||
if(!entryPoint) {
|
||||
buffer.append(")");
|
||||
}
|
||||
stringBuffer = buffer;
|
||||
|
||||
if(sourceJsonNode!=null && targetJsonNode!=null) {
|
||||
// Target has still to be analised
|
||||
|
||||
jsonQueryResource = new JsonQueryResource(targetJsonNode);
|
||||
jsonQueryResource.setDirection(Direction.IN);
|
||||
jsonQueryResource.setEntryPoint(false);
|
||||
stringBuffer = jsonQueryResource.analize(stringBuffer);
|
||||
|
||||
// It is no more and entry point for the function traverseThisEdge
|
||||
entryPoint = false;
|
||||
stringBuffer = traverseThisEdge(stringBuffer);
|
||||
// Restoring entryPoint indication
|
||||
entryPoint = true;
|
||||
}
|
||||
|
||||
return stringBuffer;
|
||||
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ public class JsonQueryTest extends ContextTest {
|
|||
@Test
|
||||
public void testSingleCreateQuery() throws Exception {
|
||||
File queriesDirectory = getQueriesDirectory();
|
||||
File jsonQueryFile = new File(queriesDirectory, "query7.json");
|
||||
File jsonQueryFile = new File(queriesDirectory, "query8.json");
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
JsonNode jsonNode = objectMapper.readTree(jsonQueryFile);
|
||||
logger.info("Going to test the following JSON query {}", jsonNode.toString());
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"@class": "CallsFor",
|
||||
"source": {
|
||||
"@class": "EService",
|
||||
"consistsOf": [
|
||||
{
|
||||
"@class": "IsIdentifiedBy",
|
||||
"target": {
|
||||
"@class": "SoftwareFacet",
|
||||
"group": "org.gcube.data-catalogue",
|
||||
"name": "gcat"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"target":{
|
||||
"@class": "VirtualService",
|
||||
"consistsOf": [
|
||||
{
|
||||
"@class": "IsIdentifiedBy",
|
||||
"target": {
|
||||
"@class": "SoftwareFacet",
|
||||
"group": "org.gcube.data-catalogue",
|
||||
"name": "catalogue-virtual-service"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
TRAVERSE inE("CallsFor") FROM ( TRAVERSE outV("VirtualService") FROM ( TRAVERSE inE("IsIdentifiedBy") FROM ( SELECT FROM ( TRAVERSE inV("SoftwareFacet") FROM ( TRAVERSE outE("IsIdentifiedBy") FROM ( TRAVERSE inV("VirtualService") FROM ( TRAVERSE outE("CallsFor") FROM ( TRAVERSE outV("EService") FROM ( TRAVERSE inE("IsIdentifiedBy") FROM ( SELECT FROM ( TRAVERSE inV("SoftwareFacet") FROM ( TRAVERSE outE("IsIdentifiedBy") FROM ( TRAVERSE outV("EService") FROM ( SELECT FROM CallsFor)))) WHERE group = "org.gcube.data-catalogue" AND name = "gcat"))))))) WHERE group = "org.gcube.data-catalogue" AND name = "catalogue-virtual-service")))
|
Loading…
Reference in New Issue