Checking if an entity with the same UUID already exist. Throwing an exception in such a case
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@135011 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
a576d3d8fa
commit
ee136fb6a6
|
@ -14,8 +14,8 @@ import org.gcube.informationsystem.resourceregistry.api.Query;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.SchemaManagement;
|
import org.gcube.informationsystem.resourceregistry.api.SchemaManagement;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.InvalidQueryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.InvalidQueryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.FacetNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.ResourceNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.rest.AccessPath;
|
import org.gcube.informationsystem.resourceregistry.api.rest.AccessPath;
|
||||||
import org.gcube.informationsystem.resourceregistry.resources.impl.EntityManagementImpl;
|
import org.gcube.informationsystem.resourceregistry.resources.impl.EntityManagementImpl;
|
||||||
|
|
|
@ -19,8 +19,8 @@ import org.gcube.informationsystem.resourceregistry.api.EntityManagement;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.EntityException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.EntityException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.FacetNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.ResourceNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.rest.EntityPath;
|
import org.gcube.informationsystem.resourceregistry.api.rest.EntityPath;
|
||||||
import org.gcube.informationsystem.resourceregistry.resources.impl.EntityManagementImpl;
|
import org.gcube.informationsystem.resourceregistry.resources.impl.EntityManagementImpl;
|
||||||
import org.gcube.informationsystem.resourceregistry.resources.utils.ContextUtility;
|
import org.gcube.informationsystem.resourceregistry.resources.utils.ContextUtility;
|
||||||
|
|
|
@ -30,8 +30,12 @@ import org.gcube.informationsystem.resourceregistry.api.EntityManagement;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.FacetNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.EntityAlreadyPresentException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.ResourceNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.EntityNotFoundException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetAlreadyPresentException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetNotFoundException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceAlreadyPresentException;
|
||||||
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
|
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
|
||||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
|
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
|
||||||
|
@ -145,23 +149,30 @@ public class EntityManagementImpl implements EntityManagement {
|
||||||
protected Vertex getEntity(OrientGraph orientGraph, JsonNode jsonNode,
|
protected Vertex getEntity(OrientGraph orientGraph, JsonNode jsonNode,
|
||||||
UUID uuid, Class<? extends Entity> entityClass)
|
UUID uuid, Class<? extends Entity> entityClass)
|
||||||
throws JsonParseException, JsonMappingException, IOException,
|
throws JsonParseException, JsonMappingException, IOException,
|
||||||
FacetNotFoundException, ResourceNotFoundException,
|
EntityNotFoundException, ResourceRegistryException {
|
||||||
ResourceRegistryException {
|
|
||||||
|
|
||||||
String classProperty = getClassProperty(jsonNode);
|
String classProperty = getClassProperty(jsonNode);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
SchemaManagementImpl.getTypeSchema(orientGraph, classProperty,
|
SchemaManagementImpl.getTypeSchema(orientGraph, classProperty,
|
||||||
classProperty);
|
entityClass.getSimpleName());
|
||||||
} catch (SchemaNotFoundException e) {
|
} catch (SchemaNotFoundException e) {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
Header header = HeaderUtility.getHeader(jsonNode, false);
|
Header header = HeaderUtility.getHeader(jsonNode, false);
|
||||||
|
if (header != null) {
|
||||||
UUID resourceUUID = header.getUUID();
|
UUID resourceUUID = header.getUUID();
|
||||||
|
if (resourceUUID.compareTo(uuid) != 0) {
|
||||||
|
String error = String
|
||||||
|
.format("UUID provided in header (%s) differs from the one (%s) used to identify the %s instance",
|
||||||
|
resourceUUID.toString(), uuid.toString(),
|
||||||
|
classProperty);
|
||||||
|
throw new ResourceRegistryException(error);
|
||||||
|
|
||||||
Vertex vertex = getEntity(orientGraph, resourceUUID, classProperty,
|
}
|
||||||
entityClass);
|
}
|
||||||
|
Vertex vertex = getEntity(orientGraph, uuid, classProperty, entityClass);
|
||||||
|
|
||||||
return vertex;
|
return vertex;
|
||||||
}
|
}
|
||||||
|
@ -536,7 +547,8 @@ public class EntityManagementImpl implements EntityManagement {
|
||||||
|
|
||||||
private Vertex createVertexEntity(OrientGraph orientGraph,
|
private Vertex createVertexEntity(OrientGraph orientGraph,
|
||||||
String entityType, Class<? extends Entity> entity,
|
String entityType, Class<? extends Entity> entity,
|
||||||
String jsonRepresentation) throws ResourceRegistryException {
|
String jsonRepresentation) throws EntityAlreadyPresentException,
|
||||||
|
ResourceRegistryException {
|
||||||
|
|
||||||
logger.trace("Going to create {} for {} ({}) using {}",
|
logger.trace("Going to create {} for {} ({}) using {}",
|
||||||
Vertex.class.getSimpleName(),
|
Vertex.class.getSimpleName(),
|
||||||
|
@ -566,6 +578,29 @@ public class EntityManagementImpl implements EntityManagement {
|
||||||
|
|
||||||
OrientVertex vertex = orientGraph.addVertex("class:" + entityType);
|
OrientVertex vertex = orientGraph.addVertex("class:" + entityType);
|
||||||
|
|
||||||
|
try {
|
||||||
|
UUID uuid = org.gcube.informationsystem.impl.utils.Utility
|
||||||
|
.getUUIDFromJsonNode(jsonNode);
|
||||||
|
|
||||||
|
Vertex v = getEntity(orientGraph, jsonNode, uuid, entity);
|
||||||
|
if(v!=null){
|
||||||
|
String error = String.format("An %s with UUID %s already exist", entity.getSimpleName(), uuid.toString());
|
||||||
|
if (Facet.class.isAssignableFrom(entity)) {
|
||||||
|
throw new FacetAlreadyPresentException(error);
|
||||||
|
}
|
||||||
|
if (Resource.class.isAssignableFrom(entity)) {
|
||||||
|
throw new ResourceAlreadyPresentException(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new EntityAlreadyPresentException(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (EntityAlreadyPresentException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (Exception e) {
|
||||||
|
// no header or no header with uuid is provided and it is fine
|
||||||
|
}
|
||||||
|
|
||||||
Header entityHeader = HeaderUtility.getHeader(jsonNode, true);
|
Header entityHeader = HeaderUtility.getHeader(jsonNode, true);
|
||||||
if (entityHeader != null) {
|
if (entityHeader != null) {
|
||||||
vertex.setProperty(Entity.HEADER_PROPERTY, entityHeader);
|
vertex.setProperty(Entity.HEADER_PROPERTY, entityHeader);
|
||||||
|
@ -600,7 +635,8 @@ public class EntityManagementImpl implements EntityManagement {
|
||||||
Utility.toJsonString((OrientVertex) vertex, true));
|
Utility.toJsonString((OrientVertex) vertex, true));
|
||||||
|
|
||||||
return vertex;
|
return vertex;
|
||||||
|
} catch (ResourceRegistryException e) {
|
||||||
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.trace("Error while creating {} for {} ({}) using {}",
|
logger.trace("Error while creating {} for {} ({}) using {}",
|
||||||
Vertex.class.getSimpleName(), entity.getClass()
|
Vertex.class.getSimpleName(), entity.getClass()
|
||||||
|
@ -787,7 +823,7 @@ public class EntityManagementImpl implements EntityManagement {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String createFacet(String facetType, String jsonRepresentation)
|
public String createFacet(String facetType, String jsonRepresentation)
|
||||||
throws ResourceRegistryException {
|
throws FacetAlreadyPresentException, ResourceRegistryException {
|
||||||
OrientGraph orientGraph = null;
|
OrientGraph orientGraph = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -1161,7 +1197,7 @@ public class EntityManagementImpl implements EntityManagement {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String createResource(String resourceType, String jsonRepresentation)
|
public String createResource(String resourceType, String jsonRepresentation)
|
||||||
throws ResourceRegistryException {
|
throws ResourceAlreadyPresentException, ResourceRegistryException {
|
||||||
|
|
||||||
logger.debug("Trying to create {} using {}", resourceType,
|
logger.debug("Trying to create {} using {}", resourceType,
|
||||||
jsonRepresentation);
|
jsonRepresentation);
|
||||||
|
@ -1415,15 +1451,30 @@ public class EntityManagementImpl implements EntityManagement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean addResourceToContext(UUID uuid)
|
public boolean addResourceToContext(UUID uuid)
|
||||||
throws ResourceNotFoundException, ContextNotFoundException,
|
throws ResourceNotFoundException, ContextNotFoundException,
|
||||||
ResourceRegistryException {
|
ResourceRegistryException {
|
||||||
return addEntityToContext(Resource.class, uuid);
|
return addEntityToContext(Resource.class, uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean addFacetToContext(UUID uuid) throws FacetNotFoundException,
|
public boolean addFacetToContext(UUID uuid) throws FacetNotFoundException,
|
||||||
ContextNotFoundException, ResourceRegistryException {
|
ContextNotFoundException, ResourceRegistryException {
|
||||||
return addEntityToContext(Facet.class, uuid);
|
return addEntityToContext(Facet.class, uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeResourceFromContext(UUID uuid)
|
||||||
|
throws ResourceNotFoundException, ContextNotFoundException,
|
||||||
|
ResourceRegistryException {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeFacetFromContext(UUID uuid)
|
||||||
|
throws FacetNotFoundException, ContextNotFoundException,
|
||||||
|
ResourceRegistryException {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,8 @@ public class HeaderUtility {
|
||||||
}
|
}
|
||||||
HeaderOrient header = null;
|
HeaderOrient header = null;
|
||||||
if(creation){
|
if(creation){
|
||||||
|
// If an header is provided MUST contains and UUID otherwise is
|
||||||
|
// an invalid request so that let that an exception is raised
|
||||||
UUID uuid = UUID.fromString(headerNode.get(Header.UUID_PROPERTY).asText());
|
UUID uuid = UUID.fromString(headerNode.get(Header.UUID_PROPERTY).asText());
|
||||||
header = (HeaderOrient) createHeader(uuid);
|
header = (HeaderOrient) createHeader(uuid);
|
||||||
}else{
|
}else{
|
||||||
|
|
|
@ -5,8 +5,8 @@ import java.util.UUID;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.EntityManagement;
|
import org.gcube.informationsystem.resourceregistry.api.EntityManagement;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.FacetNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.ResourceNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException;
|
||||||
import org.glassfish.hk2.api.Factory;
|
import org.glassfish.hk2.api.Factory;
|
||||||
|
|
||||||
public class EntityManagementFactory implements Factory<EntityManagement> {
|
public class EntityManagementFactory implements Factory<EntityManagement> {
|
||||||
|
@ -129,6 +129,22 @@ public class EntityManagementFactory implements Factory<EntityManagement> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeResourceFromContext(UUID uuid)
|
||||||
|
throws ResourceNotFoundException, ContextNotFoundException,
|
||||||
|
ResourceRegistryException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeFacetFromContext(UUID uuid)
|
||||||
|
throws FacetNotFoundException, ContextNotFoundException,
|
||||||
|
ResourceRegistryException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ import org.gcube.informationsystem.model.relation.ConsistsOf;
|
||||||
import org.gcube.informationsystem.model.relation.IsIdentifiedBy;
|
import org.gcube.informationsystem.model.relation.IsIdentifiedBy;
|
||||||
import org.gcube.informationsystem.model.relation.Relation;
|
import org.gcube.informationsystem.model.relation.Relation;
|
||||||
import org.gcube.informationsystem.model.relation.isrelatedto.Hosts;
|
import org.gcube.informationsystem.model.relation.isrelatedto.Hosts;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.FacetNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetNotFoundException;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
|
@ -42,7 +42,7 @@ import org.gcube.informationsystem.model.relation.consistsof.HasVolatileMemory;
|
||||||
import org.gcube.informationsystem.model.relation.isrelatedto.Hosts;
|
import org.gcube.informationsystem.model.relation.isrelatedto.Hosts;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
||||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.ResourceNotFoundException;
|
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
Loading…
Reference in New Issue