Starting to support results different from Resources
This commit is contained in:
parent
49c361a342
commit
485b20ac05
|
@ -1,5 +1,6 @@
|
||||||
package org.gcube.informationsystem.resourceregistry.query.json;
|
package org.gcube.informationsystem.resourceregistry.query.json;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -33,26 +34,35 @@ public class JsonQuery {
|
||||||
|
|
||||||
private static Logger logger = LoggerFactory.getLogger(JsonQuery.class);
|
private static Logger logger = LoggerFactory.getLogger(JsonQuery.class);
|
||||||
|
|
||||||
public StringBuffer createQuery(JsonNode jsonQuery) throws SchemaNotFoundException, InvalidQueryException {
|
protected ObjectMapper objectMapper;
|
||||||
JsonQueryResource jsonQueryResource = new JsonQueryResource(jsonQuery);
|
protected JsonNode jsonQuery;
|
||||||
jsonQueryResource.setEntryPoint(true);
|
protected JsonQueryERElement entryPoint;
|
||||||
jsonQueryResource.setDirection(Direction.OUT);
|
|
||||||
return jsonQueryResource.analize(new StringBuffer());
|
public JsonQuery() {
|
||||||
|
this.objectMapper = new ObjectMapper();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String query(String jsonQuery) throws InvalidQueryException, ResourceRegistryException {
|
public void setJsonQuery(JsonNode jsonQuery) {
|
||||||
|
this.jsonQuery = jsonQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJsonQuery(String jsonQuery) throws InvalidQueryException {
|
||||||
try {
|
try {
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
this.jsonQuery = objectMapper.readTree(jsonQuery);
|
||||||
JsonNode jsonNode = objectMapper.readTree(jsonQuery);
|
} catch (IOException e) {
|
||||||
return query(jsonNode, objectMapper);
|
throw new InvalidQueryException(e);
|
||||||
} catch(ResourceRegistryException e) {
|
|
||||||
throw e;
|
|
||||||
} catch(Exception e) {
|
|
||||||
throw new InvalidQueryException(e.getMessage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String query(JsonNode jsonQuery, ObjectMapper objectMapper) throws InvalidQueryException, ResourceRegistryException {
|
public StringBuffer createQuery() throws SchemaNotFoundException, InvalidQueryException {
|
||||||
|
entryPoint = new JsonQueryResource(jsonQuery);
|
||||||
|
entryPoint.setEntryPoint(true);
|
||||||
|
entryPoint.setDirection(Direction.OUT);
|
||||||
|
return entryPoint.analize(new StringBuffer());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String query() throws InvalidQueryException, ResourceRegistryException {
|
||||||
ODatabaseDocument current = ContextUtility.getCurrentODatabaseDocumentFromThreadLocal();
|
ODatabaseDocument current = ContextUtility.getCurrentODatabaseDocumentFromThreadLocal();
|
||||||
ODatabaseDocument oDatabaseDocument = null;
|
ODatabaseDocument oDatabaseDocument = null;
|
||||||
try {
|
try {
|
||||||
|
@ -63,7 +73,7 @@ public class JsonQuery {
|
||||||
oDatabaseDocument = securityContext.getDatabaseDocument(PermissionMode.READER);
|
oDatabaseDocument = securityContext.getDatabaseDocument(PermissionMode.READER);
|
||||||
oDatabaseDocument.begin();
|
oDatabaseDocument.begin();
|
||||||
|
|
||||||
StringBuffer stringBuffer = createQuery(jsonQuery);
|
StringBuffer stringBuffer = createQuery();
|
||||||
stringBuffer.append(" limit :limit");
|
stringBuffer.append(" limit :limit");
|
||||||
|
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
@ -81,13 +91,22 @@ public class JsonQuery {
|
||||||
JsonNode jsonNodeResult = null;
|
JsonNode jsonNodeResult = null;
|
||||||
ElementManagement<?,?> erManagement = ElementManagementUtility.getERManagement(securityContext, oDatabaseDocument,
|
ElementManagement<?,?> erManagement = ElementManagementUtility.getERManagement(securityContext, oDatabaseDocument,
|
||||||
element);
|
element);
|
||||||
|
|
||||||
|
// To support polymorphism we do not include @class="TypeName" in query. So we need post processing filtering of results
|
||||||
|
|
||||||
|
entryPoint.getType();
|
||||||
|
erManagement.getTypeName();
|
||||||
|
|
||||||
|
|
||||||
if(erManagement instanceof ResourceManagement) {
|
if(erManagement instanceof ResourceManagement) {
|
||||||
jsonNodeResult = erManagement.serializeAsJsonNode();
|
jsonNodeResult = erManagement.serializeAsJsonNode();
|
||||||
arrayNode.add(jsonNodeResult);
|
arrayNode.add(jsonNodeResult);
|
||||||
}else {
|
}else {
|
||||||
// Got relations and facets because the query does not include @class="TypeName" to support polymorphism
|
// Got relations and facets because the query does to support polymorphism
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} catch(ResourceRegistryException e) {
|
} catch(ResourceRegistryException e) {
|
||||||
logger.error("Unable to correctly serialize {}. It will be excluded from results. {}",
|
logger.error("Unable to correctly serialize {}. It will be excluded from results. {}",
|
||||||
element.toString(), Utility.SHOULD_NOT_OCCUR_ERROR_MESSAGE);
|
element.toString(), Utility.SHOULD_NOT_OCCUR_ERROR_MESSAGE);
|
||||||
|
|
|
@ -305,7 +305,8 @@ public class Access extends BaseRest {
|
||||||
checkIncludeInstancesContexts();
|
checkIncludeInstancesContexts();
|
||||||
|
|
||||||
JsonQuery jsonQueryManager = new JsonQuery();
|
JsonQuery jsonQueryManager = new JsonQuery();
|
||||||
return jsonQueryManager.query(jsonQuery);
|
jsonQueryManager.setJsonQuery(jsonQuery);
|
||||||
|
return jsonQueryManager.query();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -30,7 +30,9 @@ public class JsonQueryTest extends ContextTest {
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreateQuery() throws Exception {
|
public void testJsonQueries() throws Exception {
|
||||||
|
ContextTest.setContextByName(DEVVRE);
|
||||||
|
|
||||||
File queriesDirectory = getQueriesDirectory();
|
File queriesDirectory = getQueriesDirectory();
|
||||||
|
|
||||||
for(int i=1; i<4; i++) {
|
for(int i=1; i<4; i++) {
|
||||||
|
@ -40,7 +42,8 @@ public class JsonQueryTest extends ContextTest {
|
||||||
logger.info("Going to test the following JSON query {}", jsonNode.toString());
|
logger.info("Going to test the following JSON query {}", jsonNode.toString());
|
||||||
|
|
||||||
JsonQuery jsonQuery = new JsonQuery();
|
JsonQuery jsonQuery = new JsonQuery();
|
||||||
StringBuffer createdStringBuffer = jsonQuery.createQuery(jsonNode);
|
jsonQuery.setJsonQuery(jsonNode);
|
||||||
|
StringBuffer createdStringBuffer = jsonQuery.createQuery();
|
||||||
|
|
||||||
logger.info("Created Query from JSON: {}", createdStringBuffer.toString());
|
logger.info("Created Query from JSON: {}", createdStringBuffer.toString());
|
||||||
|
|
||||||
|
@ -56,21 +59,39 @@ public class JsonQueryTest extends ContextTest {
|
||||||
|
|
||||||
Assert.assertTrue(createdStringBuffer.toString().compareTo(expectedStringBuffer.toString())==0);
|
Assert.assertTrue(createdStringBuffer.toString().compareTo(expectedStringBuffer.toString())==0);
|
||||||
|
|
||||||
|
String result = jsonQuery.query();
|
||||||
|
logger.info("Result : {}", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
//@Test
|
||||||
public void testQuery() throws Exception {
|
public void testSingleCreateQuery() throws Exception {
|
||||||
ContextTest.setContextByName(DEVVRE);
|
File queriesDirectory = getQueriesDirectory();
|
||||||
URL url = JsonQueryTest.class.getResource("query.json");
|
File jsonQueryFile = new File(queriesDirectory, "query3.json");
|
||||||
File queryFile = new File(url.toURI());
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
JsonNode jsonNode = objectMapper.readTree(queryFile);
|
JsonNode jsonNode = objectMapper.readTree(jsonQueryFile);
|
||||||
logger.info("Going to test the following JSON query {}", jsonNode.toString());
|
logger.info("Going to test the following JSON query {}", jsonNode.toString());
|
||||||
|
|
||||||
JsonQuery jsonQuery = new JsonQuery();
|
JsonQuery jsonQuery = new JsonQuery();
|
||||||
String res = jsonQuery.query(jsonNode, objectMapper);
|
jsonQuery.setJsonQuery(jsonNode);
|
||||||
|
StringBuffer createdStringBuffer = jsonQuery.createQuery();
|
||||||
|
|
||||||
|
logger.info("Created Query from JSON: {}", createdStringBuffer.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test
|
||||||
|
public void testSingleQuery() throws Exception {
|
||||||
|
ContextTest.setContextByName(DEVVRE);
|
||||||
|
File queriesDirectory = getQueriesDirectory();
|
||||||
|
File jsonQueryFile = new File(queriesDirectory, "query3.json");
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
JsonNode jsonNode = objectMapper.readTree(jsonQueryFile);
|
||||||
|
logger.info("Going to test the following JSON query {}", jsonNode.toString());
|
||||||
|
|
||||||
|
JsonQuery jsonQuery = new JsonQuery();
|
||||||
|
jsonQuery.setJsonQuery(jsonNode);
|
||||||
|
String res = jsonQuery.query();
|
||||||
logger.info(res);
|
logger.info(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue