Moved Query Conditional and Logical operators in a dedicated package
This commit is contained in:
parent
d2324da565
commit
6e985eec65
|
@ -33,6 +33,8 @@ import org.gcube.informationsystem.resourceregistry.contexts.relations.IsParentO
|
||||||
import org.gcube.informationsystem.resourceregistry.contexts.security.ContextSecurityContext;
|
import org.gcube.informationsystem.resourceregistry.contexts.security.ContextSecurityContext;
|
||||||
import org.gcube.informationsystem.resourceregistry.contexts.security.SecurityContext;
|
import org.gcube.informationsystem.resourceregistry.contexts.security.SecurityContext;
|
||||||
import org.gcube.informationsystem.resourceregistry.instances.base.entities.EntityElementManagement;
|
import org.gcube.informationsystem.resourceregistry.instances.base.entities.EntityElementManagement;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.operators.QueryConditionalOperator;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.operators.QueryLogicalOperator;
|
||||||
import org.gcube.informationsystem.resourceregistry.utils.Utility;
|
import org.gcube.informationsystem.resourceregistry.utils.Utility;
|
||||||
import org.gcube.informationsystem.types.reference.entities.EntityType;
|
import org.gcube.informationsystem.types.reference.entities.EntityType;
|
||||||
import org.gcube.informationsystem.utils.ElementMapper;
|
import org.gcube.informationsystem.utils.ElementMapper;
|
||||||
|
@ -128,41 +130,63 @@ public class ContextManagement extends EntityElementManagement<Context, EntityTy
|
||||||
|
|
||||||
protected void checkContext(ContextManagement parentContext)
|
protected void checkContext(ContextManagement parentContext)
|
||||||
throws ContextNotFoundException, ContextAlreadyPresentException, ResourceRegistryException {
|
throws ContextNotFoundException, ContextAlreadyPresentException, ResourceRegistryException {
|
||||||
|
|
||||||
|
StringBuffer select = new StringBuffer();
|
||||||
|
StringBuffer errorMessage = new StringBuffer();
|
||||||
|
|
||||||
if (parentContext != null) {
|
if (parentContext != null) {
|
||||||
String parentId = parentContext.getElement().getIdentity().toString();
|
String parentId = parentContext.getElement().getIdentity().toString();
|
||||||
|
|
||||||
String select = "SELECT FROM (TRAVERSE out(" + IsParentOf.NAME + ") FROM " + parentId
|
select.append("SELECT FROM (TRAVERSE out(");
|
||||||
+ " MAXDEPTH 1) WHERE " + Context.NAME_PROPERTY + "=\"" + getName() + "\" AND "
|
select.append(IsParentOf.NAME);
|
||||||
+ Context.HEADER_PROPERTY + "." + Header.UUID_PROPERTY + "<>\"" + parentContext.uuid + "\"";
|
select.append(") FROM ");
|
||||||
|
select.append(parentId);
|
||||||
logger.trace(select);
|
select.append(" MAXDEPTH 1) WHERE ");
|
||||||
|
select.append(Context.NAME_PROPERTY);
|
||||||
StringBuilder message = new StringBuilder();
|
select.append(QueryConditionalOperator.EQ.getConditionalOperator());
|
||||||
message.append("A context with name (");
|
select.append("\"");
|
||||||
message.append(getName());
|
select.append(getName());
|
||||||
message.append(") has been already created as child of ");
|
select.append("\"");
|
||||||
message.append(parentContext.getElement().toString());
|
select.append(QueryLogicalOperator.AND.getLogicalOperator());
|
||||||
|
select.append(Context.HEADER_PROPERTY);
|
||||||
logger.trace("Checking if {} -> {}", message, select);
|
select.append(Header.UUID_PROPERTY);
|
||||||
|
select.append(QueryConditionalOperator.NE.getConditionalOperator());
|
||||||
OResultSet resultSet = oDatabaseDocument.command(select, new HashMap<>());
|
select.append("\"");
|
||||||
|
select.append(parentContext.uuid);
|
||||||
if (resultSet != null && resultSet.hasNext()) {
|
select.append("\"");
|
||||||
throw new ContextAlreadyPresentException(message.toString());
|
|
||||||
}
|
errorMessage.append("A root ");
|
||||||
|
errorMessage.append(Context.NAME);
|
||||||
|
errorMessage.append(" with ");
|
||||||
|
errorMessage.append(this.getName());
|
||||||
|
errorMessage.append(" has been already created as child of ");
|
||||||
|
errorMessage.append(parentContext.getElement().toString());
|
||||||
} else {
|
} else {
|
||||||
String select = "SELECT FROM " + Context.NAME + " WHERE " + Context.NAME_PROPERTY + " = \"" + getName()
|
select.append("SELECT FROM ");
|
||||||
+ "\"" + " AND in(\"" + IsParentOf.NAME + "\").size() = 0";
|
select.append(Context.NAME);
|
||||||
|
select.append(" WHERE ");
|
||||||
OResultSet resultSet = oDatabaseDocument.command(select, new HashMap<>());
|
select.append(Context.NAME_PROPERTY);
|
||||||
|
select.append(QueryConditionalOperator.EQ.getConditionalOperator());
|
||||||
if (resultSet != null && resultSet.hasNext()) {
|
select.append("\"");
|
||||||
throw new ContextAlreadyPresentException(
|
select.append(getName());
|
||||||
"A root context with the same name (" + this.getName() + ") already exist");
|
select.append("\"");
|
||||||
}
|
select.append(QueryLogicalOperator.AND.getLogicalOperator());
|
||||||
|
select.append("in(\"");
|
||||||
|
select.append(IsParentOf.NAME);
|
||||||
|
select.append("\").size() = 0");
|
||||||
|
|
||||||
|
errorMessage.append("A root ");
|
||||||
|
errorMessage.append(Context.NAME);
|
||||||
|
errorMessage.append(" with ");
|
||||||
|
errorMessage.append(this.getName());
|
||||||
|
errorMessage.append(" already exist");
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.trace("Checking if {} -> {}", errorMessage, select);
|
||||||
|
OResultSet resultSet = oDatabaseDocument.command(select.toString(), new HashMap<>());
|
||||||
|
|
||||||
|
if (resultSet != null && resultSet.hasNext()) {
|
||||||
|
throw new ContextAlreadyPresentException(errorMessage.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegis
|
||||||
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.api.exceptions.schema.SchemaNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.operators.QueryConditionalOperator;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.query.operators.QueryLogicalOperator;
|
||||||
import org.gcube.informationsystem.resourceregistry.types.TypesCache;
|
import org.gcube.informationsystem.resourceregistry.types.TypesCache;
|
||||||
|
|
||||||
public abstract class JsonQueryERElement {
|
public abstract class JsonQueryERElement {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.gcube.informationsystem.resourceregistry.query.json.base;
|
package org.gcube.informationsystem.resourceregistry.query.operators;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.gcube.informationsystem.resourceregistry.query.json.base;
|
package org.gcube.informationsystem.resourceregistry.query.operators;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
|
@ -1,12 +1,16 @@
|
||||||
package org.gcube.informationsystem.resourceregistry.query.templates;
|
package org.gcube.informationsystem.resourceregistry.query.templates;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
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;
|
||||||
import org.gcube.informationsystem.context.reference.entities.Context;
|
import org.gcube.informationsystem.context.reference.entities.Context;
|
||||||
import org.gcube.informationsystem.query.templates.reference.entities.QueryTemplate;
|
import org.gcube.informationsystem.query.templates.reference.entities.QueryTemplate;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.api.contexts.ContextCache;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.AlreadyPresentException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.AlreadyPresentException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException;
|
||||||
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.contexts.ContextUtility;
|
import org.gcube.informationsystem.resourceregistry.contexts.ContextUtility;
|
||||||
import org.gcube.informationsystem.resourceregistry.contexts.security.QueryTemplatesSecurityContext;
|
import org.gcube.informationsystem.resourceregistry.contexts.security.QueryTemplatesSecurityContext;
|
||||||
import org.gcube.informationsystem.resourceregistry.contexts.security.SecurityContext;
|
import org.gcube.informationsystem.resourceregistry.contexts.security.SecurityContext;
|
||||||
|
@ -17,6 +21,7 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
|
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
|
||||||
import com.orientechnologies.orient.core.record.OVertex;
|
import com.orientechnologies.orient.core.record.OVertex;
|
||||||
|
import com.orientechnologies.orient.core.sql.executor.OResultSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Luca Frosini (ISTI - CNR)
|
* @author Luca Frosini (ISTI - CNR)
|
||||||
|
@ -27,13 +32,9 @@ public class QueryTemplateManagement extends EntityElementManagement<Context, En
|
||||||
|
|
||||||
protected String name;
|
protected String name;
|
||||||
|
|
||||||
private void init() {
|
|
||||||
this.typeName = QueryTemplate.NAME;
|
|
||||||
}
|
|
||||||
|
|
||||||
public QueryTemplateManagement() {
|
public QueryTemplateManagement() {
|
||||||
super(AccessType.QUERY_TEMPLATE);
|
super(AccessType.QUERY_TEMPLATE);
|
||||||
init();
|
this.typeName = QueryTemplate.NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueryTemplateManagement(ODatabaseDocument oDatabaseDocument) throws ResourceRegistryException {
|
public QueryTemplateManagement(ODatabaseDocument oDatabaseDocument) throws ResourceRegistryException {
|
||||||
|
@ -42,6 +43,23 @@ public class QueryTemplateManagement extends EntityElementManagement<Context, En
|
||||||
getWorkingContext();
|
getWorkingContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
if (name == null) {
|
||||||
|
if (element == null) {
|
||||||
|
if (jsonNode != null) {
|
||||||
|
name = jsonNode.get(Context.NAME_PROPERTY).asText();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
name = element.getProperty(Context.NAME_PROPERTY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SecurityContext getWorkingContext() throws ResourceRegistryException {
|
protected SecurityContext getWorkingContext() throws ResourceRegistryException {
|
||||||
if (workingContext == null) {
|
if (workingContext == null) {
|
||||||
|
@ -51,27 +69,72 @@ public class QueryTemplateManagement extends EntityElementManagement<Context, En
|
||||||
return workingContext;
|
return workingContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setName(String queryTemplateName) {
|
@Override
|
||||||
// TODO Auto-generated method stub
|
protected JsonNode createCompleteJsonNode() throws ResourceRegistryException {
|
||||||
|
JsonNode queryTemplate = serializeSelfAsJsonNode();
|
||||||
|
return queryTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void checkIfNameAlreadyExists() throws AlreadyPresentException {
|
||||||
|
StringBuffer select = new StringBuffer();
|
||||||
|
select.append("SELECT FROM ");
|
||||||
|
select.append(QueryTemplate.NAME);
|
||||||
|
select.append(" WHERE ");
|
||||||
|
select.append(QueryTemplate.NAME_PROPERTY);
|
||||||
|
select.append(" = ");
|
||||||
|
select.append("\"");
|
||||||
|
select.append(getName());
|
||||||
|
select.append("\"");
|
||||||
|
|
||||||
|
StringBuffer errorMessage = new StringBuffer();
|
||||||
|
errorMessage.append("A ");
|
||||||
|
errorMessage.append(QueryTemplate.NAME);
|
||||||
|
errorMessage.append(" with ");
|
||||||
|
errorMessage.append(this.getName());
|
||||||
|
errorMessage.append(" already exists");
|
||||||
|
|
||||||
|
logger.trace("Checking if {} -> {}", errorMessage, select);
|
||||||
|
|
||||||
|
OResultSet resultSet = oDatabaseDocument.command(select.toString(), new HashMap<>());
|
||||||
|
|
||||||
|
if (resultSet != null && resultSet.hasNext()) {
|
||||||
|
throw new AlreadyPresentException(errorMessage.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tryTemplate() throws InvalidQueryException {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected JsonNode createCompleteJsonNode() throws ResourceRegistryException {
|
protected OVertex reallyCreate() throws AlreadyPresentException, InvalidQueryException, ResourceRegistryException {
|
||||||
// TODO Auto-generated method stub
|
try {
|
||||||
return null;
|
checkIfNameAlreadyExists();
|
||||||
}
|
tryTemplate();
|
||||||
|
createVertex();
|
||||||
@Override
|
return getElement();
|
||||||
protected OVertex reallyCreate() throws AlreadyPresentException, ResourceRegistryException {
|
} catch(ResourceRegistryException e) {
|
||||||
// TODO Auto-generated method stub
|
throw e;
|
||||||
return null;
|
} catch(Exception e) {
|
||||||
|
logger.trace("Error while creating {} for {} ({}) using {}", OVertex.class.getSimpleName(),
|
||||||
|
accessType.getName(), typeName, jsonNode, e);
|
||||||
|
throw new ResourceRegistryException("Error Creating " + typeName + " with " + jsonNode, e.getCause());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected OVertex reallyUpdate() throws NotFoundException, ResourceRegistryException {
|
protected OVertex reallyUpdate() throws NotFoundException, ResourceRegistryException {
|
||||||
// TODO Auto-generated method stub
|
try {
|
||||||
return null;
|
|
||||||
|
tryTemplate();
|
||||||
|
return getElement();
|
||||||
|
} catch(ResourceRegistryException e) {
|
||||||
|
throw e;
|
||||||
|
} catch(Exception e) {
|
||||||
|
logger.trace("Error while creating {} for {} ({}) using {}", OVertex.class.getSimpleName(),
|
||||||
|
accessType.getName(), typeName, jsonNode, e);
|
||||||
|
throw new ResourceRegistryException("Error Creating " + typeName + " with " + jsonNode, e.getCause());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -82,14 +145,12 @@ public class QueryTemplateManagement extends EntityElementManagement<Context, En
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected NotFoundException getSpecificNotFoundException(NotFoundException e) {
|
protected NotFoundException getSpecificNotFoundException(NotFoundException e) {
|
||||||
// TODO Auto-generated method stub
|
return new NotFoundException(e);
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AlreadyPresentException getSpecificAlreadyPresentException(String message) {
|
protected AlreadyPresentException getSpecificAlreadyPresentException(String message) {
|
||||||
// TODO Auto-generated method stub
|
return new AlreadyPresentException(message);
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue