Reorganizing code

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@141436 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2016-12-30 16:31:12 +00:00
parent 0bcdd8a260
commit 1078b43fcf
17 changed files with 1002 additions and 1035 deletions

View File

@ -57,11 +57,11 @@ public class SchemaActionImpl implements SchemaAction {
String json = TypeBinder.serializeType(e);
logger.trace(json);
if (Facet.class.isAssignableFrom(e)) {
schemaManagement.registerFacetSchema(json);
schemaManagement.createFacetSchema(json);
} else if(Resource.class.isAssignableFrom(e)){
schemaManagement.registerResourceSchema(json);
} else {
schemaManagement.registerEntitySchema(json);
schemaManagement.createEntitySchema(json);
}
} catch(Exception ex){
logger.error("Error creating schema for {} type {} : {}", Entity.NAME, e.getSimpleName(), ex.getMessage());

View File

@ -12,30 +12,388 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import org.codehaus.jettison.json.JSONObject;
import org.gcube.informationsystem.impl.utils.Entities;
import org.gcube.informationsystem.model.embedded.Header;
import org.gcube.informationsystem.model.entity.Facet;
import org.gcube.informationsystem.model.entity.Resource;
import org.gcube.informationsystem.model.relation.ConsistsOf;
import org.gcube.informationsystem.model.relation.IsRelatedTo;
import org.gcube.informationsystem.model.relation.Relation;
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.EntityNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.relation.RelationNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
import org.gcube.informationsystem.resourceregistry.context.ContextUtility;
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
import org.gcube.informationsystem.resourceregistry.schema.SchemaManagementImpl;
import org.gcube.informationsystem.resourceregistry.utils.HeaderUtility;
import org.gcube.informationsystem.resourceregistry.utils.Utility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.JsonNodeType;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.orient.OrientElement;
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
/**
* @author Luca Frosini (ISTI - CNR)
*
*/
public class ERManagement {
public abstract class ERManagement<ER, El extends Element> {
private static Logger logger = LoggerFactory.getLogger(ERManagement.class);
public static String lowerCaseFirstCharacter(String string) {
return string.substring(0, 1).toLowerCase() + string.substring(1);
public final String AT = "@";
public final String UNDERSCORE = "_";
protected final Set<String> ignoreKeys;
protected final Set<String> ignoreStartWithKeys;
protected Class<ER> erClass;
protected String baseType;
protected OrientGraph orientGraph;
protected UUID uuid;
protected JsonNode jsonNode;
protected String erType;
protected Class<El> elementClass;
protected El element;
protected ERManagement(Class<ER> erClass) {
this.erClass = erClass;
this.ignoreKeys = new HashSet<String>();
this.ignoreStartWithKeys = new HashSet<String>();
this.ignoreStartWithKeys.add(AT);
this.ignoreStartWithKeys.add(UNDERSCORE);
}
protected ERManagement(Class<ER> erClass, OrientGraph orientGraph) {
this(erClass);
this.orientGraph = orientGraph;
}
public void setUUID(UUID uuid) throws ResourceRegistryException {
this.uuid = uuid;
if (jsonNode != null) {
checkUUIDMatch();
}
}
public void setJSON(JsonNode jsonNode) throws ResourceRegistryException {
this.jsonNode = jsonNode;
checkJSON();
}
public void setJSON(String jsonRepresentation)
throws ResourceRegistryException {
ObjectMapper mapper = new ObjectMapper();
try {
this.jsonNode = mapper.readTree(jsonRepresentation);
} catch (IOException e) {
throw new ResourceRegistryException(e);
}
checkJSON();
}
public void setElementType(String erType) throws ResourceRegistryException {
this.erType = erType;
if (erType == null || erType.compareTo("") == 0) {
if (Facet.class.isAssignableFrom(erClass)) {
this.erType = Facet.NAME;
}
if (Resource.class.isAssignableFrom(erClass)) {
this.erType = Resource.NAME;
}
if (ConsistsOf.class.isAssignableFrom(erClass)) {
this.erType = ConsistsOf.NAME;
}
if (IsRelatedTo.class.isAssignableFrom(erClass)) {
this.erType = IsRelatedTo.NAME;
}
throw new ResourceRegistryException("Invalid type " + erType
+ " provided");
}
if (jsonNode != null) {
checkERMatch();
}
}
protected void checkJSON() throws ResourceRegistryException {
if (uuid == null) {
try {
uuid = org.gcube.informationsystem.impl.utils.Utility
.getUUIDFromJsonNode(jsonNode);
} catch (Exception e) {
}
} else {
checkUUIDMatch();
}
if (this.erType == null) {
this.erType = getClassProperty(jsonNode);
} else {
checkERMatch();
}
}
protected void checkERMatch() throws ResourceRegistryException {
String type = getClassProperty(jsonNode);
if (type != null && type.compareTo(erType) != 0) {
String error = String
.format("Declared resourceType does not match with json representation %s!=%s",
erType, type);
logger.trace(error);
throw new ResourceRegistryException(error);
}
try {
SchemaManagementImpl.getTypeSchema(erType, baseType);
} catch (SchemaNotFoundException e) {
throw e;
}
}
protected void checkUUIDMatch() throws ResourceRegistryException {
Header header = null;
try {
header = HeaderUtility.getHeader(jsonNode, false);
} catch (Exception e) {
throw new ResourceRegistryException(e);
}
if (header != null) {
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(),
erType);
throw new ResourceRegistryException(error);
}
}
}
public abstract String serialize() throws ResourceRegistryException;
public abstract JSONObject serializeAsJson()
throws ResourceRegistryException;
public abstract El reallyUpdate() throws EntityNotFoundException,
ResourceRegistryException;
public abstract boolean reallyDelete() throws EntityNotFoundException,
ResourceRegistryException;
public abstract boolean reallyAddToContext() throws ContextException,
ResourceRegistryException;
public abstract boolean reallyRemoveFromContext() throws ContextException,
ResourceRegistryException;
public void setElement(El element) throws ResourceRegistryException {
if (element == null) {
throw new ResourceRegistryException("Trying to set null "
+ elementClass.getSimpleName() + " in " + this);
}
this.element = element;
this.uuid = HeaderUtility.getHeader(element).getUUID();
}
protected void throwElementNotFoundException(ResourceRegistryException e)
throws EntityNotFoundException, RelationNotFoundException,
ResourceRegistryException {
if (Resource.class.isAssignableFrom(erClass)) {
throw new ResourceNotFoundException(e);
} else if (Facet.class.isAssignableFrom(erClass)) {
throw new FacetNotFoundException(e);
} else if (Relation.class.isAssignableFrom(erClass)) {
throw new RelationNotFoundException(e);
}
throw e;
}
public El getElement() throws ResourceRegistryException {
try {
if (element == null) {
element = Utility.getElementByUUID(orientGraph,
erType == null ? baseType : erType, uuid, elementClass);
}
} catch (ResourceRegistryException e) {
throwElementNotFoundException(e);
}
return element;
}
public String read() throws EntityNotFoundException,
ResourceRegistryException {
try {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.READER);
getElement();
return serialize();
} catch (ResourceRegistryException e) {
throw e;
} catch (Exception e) {
throw new ResourceRegistryException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public String update() throws RelationNotFoundException,
ResourceRegistryException {
try {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.WRITER);
element = reallyUpdate();
orientGraph.commit();
return serialize();
} catch (ResourceRegistryException e) {
if (orientGraph != null) {
orientGraph.rollback();
}
throw e;
} catch (Exception e) {
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ResourceRegistryException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public boolean delete() throws FacetNotFoundException,
ResourceRegistryException {
logger.debug("Going to delete {} with UUID {}", baseType, uuid);
try {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.WRITER);
boolean deleted = reallyDelete();
orientGraph.commit();
logger.info("{} with UUID {} was successfully deleted.", baseType,
uuid);
return deleted;
} catch (ResourceRegistryException e) {
logger.error("Unable to delete {} with UUID {}", baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw e;
} catch (Exception e) {
logger.error("Unable to delete {} with UUID {}", baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ResourceRegistryException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public boolean addToContext() throws ContextException {
logger.debug("Going to add {} with UUID {} to actual Context",
baseType, uuid);
try {
orientGraph = SecurityContextMapper.getSecurityContextFactory(
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
PermissionMode.WRITER).getTx();
boolean added = reallyAddToContext();
orientGraph.commit();
logger.info("{} with UUID {} successfully added to actual Context",
baseType, uuid);
return added;
} catch (Exception e) {
logger.error("Unable to add {} with UUID {} to actual Context",
baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ContextException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public boolean removeFromContext() throws ContextException {
logger.debug("Going to remove {} with UUID {} from actual Context",
baseType, uuid);
try {
orientGraph = SecurityContextMapper.getSecurityContextFactory(
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
PermissionMode.WRITER).getTx();
boolean removed = reallyRemoveFromContext();
orientGraph.commit();
logger.info(
"{} with UUID {} successfully removed from actual Context",
baseType, uuid);
return removed;
} catch (Exception e) {
logger.error(
"Unable to remove {} with UUID {} from actual Context",
baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ContextException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public static String getClassProperty(JsonNode jsonNode) {
@ -45,8 +403,6 @@ public class ERManagement {
return null;
}
public static Object getObjectFromElement(JsonNode value)
throws ResourceRegistryException {
JsonNodeType jsonNodeType = value.getNodeType();
@ -152,17 +508,18 @@ public class ERManagement {
return map;
}
public static Element updateProperties(Element element, JsonNode jsonNode, Set<String> ignoreKeys, Set<String> ignoreStartWithKeys)
public static Element updateProperties(Element element, JsonNode jsonNode,
Set<String> ignoreKeys, Set<String> ignoreStartWithKeys)
throws ResourceRegistryException {
Set<String> oldKeys = element.getPropertyKeys();
Map<String, Object> properties;
if (element instanceof Vertex || element instanceof Edge) {
try {
properties = getPropertyMap(jsonNode, ignoreKeys, ignoreStartWithKeys);
} catch ( IOException e) {
properties = getPropertyMap(jsonNode, ignoreKeys,
ignoreStartWithKeys);
} catch (IOException e) {
throw new ResourceRegistryException(e);
}
} else {
@ -201,11 +558,8 @@ public class ERManagement {
}
((OrientElement) element).save();
return element;
}
}

View File

@ -3,12 +3,6 @@
*/
package org.gcube.informationsystem.resourceregistry.er.entity;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import org.codehaus.jettison.json.JSONObject;
import org.gcube.informationsystem.model.embedded.Header;
import org.gcube.informationsystem.model.entity.Entity;
import org.gcube.informationsystem.model.entity.Facet;
@ -16,23 +10,15 @@ import org.gcube.informationsystem.model.entity.Resource;
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.EntityAlreadyPresentException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.EntityNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
import org.gcube.informationsystem.resourceregistry.context.ContextUtility;
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
import org.gcube.informationsystem.resourceregistry.er.ERManagement;
import org.gcube.informationsystem.resourceregistry.er.relation.RelationManagement;
import org.gcube.informationsystem.resourceregistry.schema.SchemaManagementImpl;
import org.gcube.informationsystem.resourceregistry.utils.HeaderUtility;
import org.gcube.informationsystem.resourceregistry.utils.Utility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Vertex;
@ -43,32 +29,19 @@ import com.tinkerpop.blueprints.impls.orient.OrientVertexType;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public abstract class EntityManagement<E extends Entity> {
public abstract class EntityManagement<E extends Entity> extends
ERManagement<E, Vertex> {
private static Logger logger = LoggerFactory
.getLogger(EntityManagement.class);
public final String AT = "@";
public final String UNDERSCORE = "_";
protected final Set<String> ignoreKeys;
protected final Set<String> ignoreStartWithKeys;
protected final Class<E> entityClass;
protected final String baseType;
protected OrientGraph orientGraph;
protected UUID uuid;
protected JsonNode jsonNode;
protected String entityType;
protected Vertex vertex;
protected Vertex element;
protected EntityManagement(Class<E> entityClass) {
this.ignoreKeys = new HashSet<String>();
super(entityClass);
this.ignoreKeys.add(Entity.HEADER_PROPERTY);
this.ignoreStartWithKeys = new HashSet<String>();
this.ignoreStartWithKeys.add(OrientVertex.CONNECTION_IN_PREFIX
.toLowerCase());
this.ignoreStartWithKeys.add(OrientVertex.CONNECTION_OUT_PREFIX
@ -77,10 +50,7 @@ public abstract class EntityManagement<E extends Entity> {
.toUpperCase());
this.ignoreStartWithKeys.add(OrientVertex.CONNECTION_OUT_PREFIX
.toUpperCase());
this.ignoreStartWithKeys.add(AT);
this.ignoreStartWithKeys.add(UNDERSCORE);
this.entityClass = entityClass;
if (Facet.class.isAssignableFrom(entityClass)) {
this.baseType = Facet.NAME;
} else if (Resource.class.isAssignableFrom(entityClass)) {
@ -95,150 +65,22 @@ public abstract class EntityManagement<E extends Entity> {
this.orientGraph = orientGraph;
}
public void setVertex(Vertex vertex) throws ResourceRegistryException {
if (vertex == null) {
throw new ResourceRegistryException("Trying to set null Vertex in "
+ this);
}
this.vertex = vertex;
this.uuid = HeaderUtility.getHeader(vertex).getUUID();
}
public void setUUID(UUID uuid) throws ResourceRegistryException {
this.uuid = uuid;
if (jsonNode != null) {
checkUUIDMatch();
}
}
public void setJSON(JsonNode jsonNode) throws ResourceRegistryException {
this.jsonNode = jsonNode;
checkJSON();
}
public void setJSON(String jsonRepresentation)
throws ResourceRegistryException {
ObjectMapper mapper = new ObjectMapper();
try {
this.jsonNode = mapper.readTree(jsonRepresentation);
} catch (IOException e) {
throw new ResourceRegistryException(e);
}
checkJSON();
}
protected void checkJSON() throws ResourceRegistryException {
if (uuid == null) {
try {
uuid = org.gcube.informationsystem.impl.utils.Utility
.getUUIDFromJsonNode(jsonNode);
} catch (Exception e) {
}
} else {
checkUUIDMatch();
}
if (this.entityType == null) {
this.entityType = ERManagement.getClassProperty(jsonNode);
} else {
checkEntityMatch();
}
}
public void setEntityType(String entityType)
throws ResourceRegistryException {
this.entityType = entityType;
if (entityType == null || entityType.compareTo("") == 0) {
if (Facet.class.isAssignableFrom(entityClass)) {
entityType = Facet.NAME;
}
if (Resource.class.isAssignableFrom(entityClass)) {
entityType = Resource.NAME;
}
}
if (jsonNode != null) {
checkEntityMatch();
}
}
protected void checkEntityMatch() throws ResourceRegistryException {
String type = ERManagement.getClassProperty(jsonNode);
if (type != null && type.compareTo(entityType) != 0) {
String error = String
.format("Declared resourceType does not match with json representation %s!=%s",
entityType, type);
logger.trace(error);
throw new ResourceRegistryException(error);
}
try {
SchemaManagementImpl.getTypeSchema(entityType, baseType);
} catch (SchemaNotFoundException e) {
throw e;
}
}
protected void checkUUIDMatch() throws ResourceRegistryException {
Header header = null;
try {
header = HeaderUtility.getHeader(jsonNode, false);
} catch (Exception e) {
throw new ResourceRegistryException(e);
}
if (header != null) {
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(),
entityType);
throw new ResourceRegistryException(error);
}
}
}
public Vertex getVertex() throws EntityNotFoundException,
ResourceRegistryException {
try {
if (vertex == null) {
vertex = Utility.getElementByUUID(orientGraph,
entityType == null ? baseType : entityType, uuid,
Vertex.class);
}
return vertex;
} catch (ResourceRegistryException e) {
if (Resource.class.isAssignableFrom(entityClass)) {
throw new ResourceNotFoundException(e);
} else if (Facet.class.isAssignableFrom(entityClass)) {
throw new FacetNotFoundException(e);
} else {
throw e;
}
}
}
protected Vertex createVertex() throws EntityAlreadyPresentException,
ResourceRegistryException {
logger.trace("Going to create {} for {} ({}) using {}",
Vertex.class.getSimpleName(), baseType, entityType, jsonNode);
Vertex.class.getSimpleName(), baseType, erType, jsonNode);
try {
Vertex vertexEntity = orientGraph.addVertex("class:" + entityType);
Vertex vertexEntity = orientGraph.addVertex("class:" + erType);
try {
Vertex v = getVertex();
Vertex v = getElement();
if (v != null) {
String error = String.format(
"A %s with UUID %s already exist", entityType,
"A %s with UUID %s already exist", erType,
uuid.toString());
throw new EntityAlreadyPresentException(error);
}
@ -249,61 +91,47 @@ public abstract class EntityManagement<E extends Entity> {
// no header or no header with uuid is provided and it is fine
}
this.vertex = vertexEntity;
this.element = vertexEntity;
Header entityHeader = HeaderUtility.getHeader(jsonNode, true);
if (entityHeader != null) {
vertex.setProperty(Entity.HEADER_PROPERTY, entityHeader);
element.setProperty(Entity.HEADER_PROPERTY, entityHeader);
} else {
entityHeader = HeaderUtility.addHeader(vertex, null);
entityHeader = HeaderUtility.addHeader(element, null);
}
if (Resource.class.isAssignableFrom(entityClass)) {
if (Resource.class.isAssignableFrom(erClass)) {
// Facet and relation are created in calling method
} else {
ERManagement.updateProperties(vertex, jsonNode, ignoreKeys,
ERManagement.updateProperties(element, jsonNode, ignoreKeys,
ignoreStartWithKeys);
}
ContextUtility.addToActualContext(orientGraph, vertex);
ContextUtility.addToActualContext(orientGraph, element);
((OrientVertex) vertex).save();
((OrientVertex) element).save();
logger.info("Created {} is {}", Vertex.class.getSimpleName(),
Utility.toJsonString((OrientVertex) vertex, true));
Utility.toJsonString((OrientVertex) element, true));
return vertex;
return element;
} catch (ResourceRegistryException e) {
throw e;
} catch (Exception e) {
logger.trace("Error while creating {} for {} ({}) using {}",
Vertex.class.getSimpleName(), baseType, entityType,
jsonNode, e);
throw new ResourceRegistryException("Error Creating " + entityType
Vertex.class.getSimpleName(), baseType, erType, jsonNode, e);
throw new ResourceRegistryException("Error Creating " + erType
+ " with " + jsonNode, e.getCause());
}
}
public abstract String serialize() throws ResourceRegistryException;
public abstract JSONObject serializeAsJson()
throws ResourceRegistryException;
public abstract Vertex reallyCreate() throws EntityAlreadyPresentException,
ResourceRegistryException;
public abstract Vertex reallyUpdate() throws EntityNotFoundException,
ResourceRegistryException;
public abstract boolean reallyDelete() throws EntityNotFoundException,
ResourceRegistryException;
@Override
public boolean reallyAddToContext() throws ContextException,
ResourceRegistryException {
ContextUtility.addToActualContext(orientGraph, getVertex());
ContextUtility.addToActualContext(orientGraph, getElement());
Iterable<Edge> edges = vertex.getEdges(Direction.OUT);
Iterable<Edge> edges = element.getEdges(Direction.OUT);
for (Edge edge : edges) {
@SuppressWarnings("rawtypes")
@ -315,12 +143,13 @@ public abstract class EntityManagement<E extends Entity> {
return true;
}
@Override
public boolean reallyRemoveFromContext() throws ContextException,
ResourceRegistryException {
ContextUtility.removeFromActualContext(orientGraph, getVertex());
Iterable<Edge> edges = vertex.getEdges(Direction.OUT);
ContextUtility.removeFromActualContext(orientGraph, getElement());
Iterable<Edge> edges = element.getEdges(Direction.OUT);
for (Edge edge : edges) {
@SuppressWarnings("rawtypes")
@ -332,7 +161,7 @@ public abstract class EntityManagement<E extends Entity> {
return true;
}
@SuppressWarnings("rawtypes")
@SuppressWarnings({ "rawtypes", "unchecked" })
public static EntityManagement getEntityManagement(OrientGraph orientGraph,
Vertex vertex) throws ResourceRegistryException {
OrientVertexType orientVertexType = ((OrientVertex) vertex).getType();
@ -348,10 +177,13 @@ public abstract class EntityManagement<E extends Entity> {
Facet.NAME);
throw new ResourceRegistryException(error);
}
entityManagement.setVertex(vertex);
entityManagement.setElement(vertex);
return entityManagement;
}
public abstract Vertex reallyCreate() throws EntityAlreadyPresentException,
ResourceRegistryException;
public String create() throws EntityAlreadyPresentException,
ResourceRegistryException {
@ -359,7 +191,7 @@ public abstract class EntityManagement<E extends Entity> {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.WRITER);
reallyCreate();
element = reallyCreate();
orientGraph.commit();
@ -382,154 +214,6 @@ public abstract class EntityManagement<E extends Entity> {
}
}
public String read() throws EntityNotFoundException,
ResourceRegistryException {
try {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.READER);
getVertex();
return serialize();
} catch (ResourceRegistryException e) {
throw e;
} catch (Exception e) {
throw new ResourceRegistryException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public String update() throws EntityNotFoundException,
ResourceRegistryException {
try {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.WRITER);
reallyUpdate();
orientGraph.commit();
return serialize();
} catch (ResourceRegistryException e) {
if (orientGraph != null) {
orientGraph.rollback();
}
throw e;
} catch (Exception e) {
logger.debug("Unable to update {} with UUID {} usign {}", baseType,
uuid, jsonNode, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ResourceRegistryException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public boolean delete() throws FacetNotFoundException,
ResourceRegistryException {
logger.debug("Going to delete {} with UUID {}", baseType, uuid);
try {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.WRITER);
boolean deleted = reallyDelete();
orientGraph.commit();
logger.info("{} with UUID {} was successfully deleted.", baseType,
uuid);
return deleted;
} catch (ResourceRegistryException e) {
logger.error("Unable to delete {} with UUID {}", baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw e;
} catch (Exception e) {
logger.error("Unable to delete {} with UUID {}", baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ResourceRegistryException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public boolean addToContext() throws ContextException {
logger.debug("Going to add {} with UUID {} to actual Context",
baseType, uuid);
try {
orientGraph = SecurityContextMapper.getSecurityContextFactory(
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
PermissionMode.WRITER).getTx();
boolean added = reallyAddToContext();
orientGraph.commit();
logger.info("{} with UUID {} successfully added to actual Context",
baseType, uuid);
return added;
} catch (Exception e) {
logger.error("Unable to add {} with UUID {} to actual Context",
baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ContextException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public boolean removeFromContext() throws ContextException {
logger.debug("Going to remove {} with UUID {} from actual Context",
baseType, uuid);
try {
orientGraph = SecurityContextMapper.getSecurityContextFactory(
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
PermissionMode.WRITER).getTx();
boolean removed = reallyRemoveFromContext();
orientGraph.commit();
logger.info(
"{} with UUID {} successfully removed from actual Context",
baseType, uuid);
return removed;
} catch (Exception e) {
logger.error(
"Unable to remove {} with UUID {} from actual Context",
baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ContextException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
}

View File

@ -31,12 +31,12 @@ public class FacetManagement extends EntityManagement<Facet> {
@Override
public String serialize() throws ResourceRegistryException {
return Utility.toJsonString((OrientVertex) vertex, true);
return Utility.toJsonString((OrientVertex) element, true);
}
@Override
public JSONObject serializeAsJson() throws ResourceRegistryException {
return Utility.toJsonObject((OrientVertex) vertex, true);
return Utility.toJsonObject((OrientVertex) element, true);
}
public Vertex reallyCreate() throws FacetAlreadyPresentException, ResourceRegistryException {
@ -45,14 +45,14 @@ public class FacetManagement extends EntityManagement<Facet> {
@Override
public Vertex reallyUpdate() throws ResourceRegistryException {
Vertex facet = getVertex();
Vertex facet = getElement();
facet = (Vertex) ERManagement.updateProperties(facet, jsonNode, ignoreKeys, ignoreStartWithKeys);
((OrientVertex) facet).save();
return facet;
}
public boolean reallyDelete() throws FacetNotFoundException, ResourceRegistryException {
getVertex().remove();
getElement().remove();
return true;
}

View File

@ -14,10 +14,10 @@ import org.gcube.informationsystem.model.relation.IsRelatedTo;
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.EntityAlreadyPresentException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException;
import org.gcube.informationsystem.resourceregistry.er.ERManagement;
import org.gcube.informationsystem.resourceregistry.er.relation.ConsistsOfManagement;
import org.gcube.informationsystem.resourceregistry.er.relation.IsRelatedToManagement;
import org.gcube.informationsystem.resourceregistry.er.relation.RelationManagement;
import org.gcube.informationsystem.resourceregistry.rest.AccessType;
import org.gcube.informationsystem.resourceregistry.utils.Utility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -78,7 +78,7 @@ public class ResourceManagement extends EntityManagement<Resource> {
}
try {
jsonObject.put(ERManagement.lowerCaseFirstCharacter(ConsistsOf.NAME),
jsonObject.put(AccessType.CONSISTS_OF.lowerCaseFirstCharacter(),
consistsOfArray);
} catch (JSONException e) {
throw new ResourceRegistryException(e);
@ -93,12 +93,12 @@ public class ResourceManagement extends EntityManagement<Resource> {
@Override
public String serialize() throws ResourceRegistryException {
return marshallResource(orientGraph, getVertex()).toString();
return marshallResource(orientGraph, getElement()).toString();
}
@Override
public JSONObject serializeAsJson() throws ResourceRegistryException {
return marshallResource(orientGraph, getVertex());
return marshallResource(orientGraph, getElement());
}
@Override
@ -106,36 +106,36 @@ public class ResourceManagement extends EntityManagement<Resource> {
ResourceRegistryException {
createVertex();
String property = ERManagement.lowerCaseFirstCharacter(ConsistsOf.NAME);
String property = AccessType.CONSISTS_OF.lowerCaseFirstCharacter();
if (jsonNode.has(property)) {
JsonNode jsonNodeArray = jsonNode.get(property);
for (JsonNode consistOfJsonNode : jsonNodeArray) {
ConsistsOfManagement com = new ConsistsOfManagement(orientGraph);
com.setJSON(consistOfJsonNode);
com.reallyCreate(vertex);
com.reallyCreate(element);
}
}
property = ERManagement.lowerCaseFirstCharacter(IsRelatedTo.NAME);
property = AccessType.IS_RELATED_TO.lowerCaseFirstCharacter();
if (jsonNode.has(property)) {
JsonNode jsonNodeArray = jsonNode.get(property);
for (JsonNode relationJsonNode : jsonNodeArray) {
IsRelatedToManagement irtm = new IsRelatedToManagement(
orientGraph);
irtm.setJSON(relationJsonNode);
irtm.reallyCreate(vertex);
irtm.reallyCreate(element);
}
}
return vertex;
return element;
}
@Override
public Vertex reallyUpdate() throws ResourceRegistryException {
getVertex();
getElement();
String property = ERManagement.lowerCaseFirstCharacter(ConsistsOf.NAME);
String property = AccessType.CONSISTS_OF.lowerCaseFirstCharacter();
if (jsonNode.has(property)) {
JsonNode jsonNodeArray = jsonNode.get(property);
for (JsonNode relationJsonNode : jsonNodeArray) {
@ -145,7 +145,7 @@ public class ResourceManagement extends EntityManagement<Resource> {
}
}
property = ERManagement.lowerCaseFirstCharacter(IsRelatedTo.NAME);
property = AccessType.IS_RELATED_TO.lowerCaseFirstCharacter();
if (jsonNode.has(property)) {
JsonNode jsonNodeArray = jsonNode.get(property);
for (JsonNode relationJsonNode : jsonNodeArray) {
@ -156,19 +156,20 @@ public class ResourceManagement extends EntityManagement<Resource> {
}
}
((OrientVertex) vertex).save();
((OrientVertex) element).save();
return vertex;
return element;
}
@SuppressWarnings("unchecked")
@Override
public boolean reallyDelete() throws ResourceNotFoundException,
ResourceRegistryException {
//internalDeleteResource(orientGraph, uuid, null);
getVertex();
getElement();
Iterable<Edge> iterable = vertex.getEdges(Direction.OUT);
Iterable<Edge> iterable = element.getEdges(Direction.OUT);
Iterator<Edge> iterator = iterable.iterator();
while(iterator.hasNext()){
Edge edge = iterator.next();
@ -187,13 +188,13 @@ public class ResourceManagement extends EntityManagement<Resource> {
IsRelatedTo.NAME, ConsistsOf.NAME);
}
if(relationManagement!=null){
relationManagement.setEdge(edge);
relationManagement.setElement(edge);
relationManagement.reallyDelete();
}
}
vertex.remove();
element.remove();
return true;
}

View File

@ -3,15 +3,11 @@
*/
package org.gcube.informationsystem.resourceregistry.er.relation;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.UUID;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.gcube.informationsystem.model.embedded.Header;
import org.gcube.informationsystem.model.embedded.PropagationConstraint;
import org.gcube.informationsystem.model.embedded.PropagationConstraint.AddConstraint;
import org.gcube.informationsystem.model.embedded.PropagationConstraint.RemoveConstraint;
@ -24,22 +20,18 @@ import org.gcube.informationsystem.model.relation.Relation;
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.relation.RelationNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
import org.gcube.informationsystem.resourceregistry.context.ContextUtility;
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
import org.gcube.informationsystem.resourceregistry.er.ERManagement;
import org.gcube.informationsystem.resourceregistry.er.entity.EntityManagement;
import org.gcube.informationsystem.resourceregistry.er.entity.FacetManagement;
import org.gcube.informationsystem.resourceregistry.er.entity.ResourceManagement;
import org.gcube.informationsystem.resourceregistry.schema.SchemaManagementImpl;
import org.gcube.informationsystem.resourceregistry.utils.HeaderUtility;
import org.gcube.informationsystem.resourceregistry.utils.Utility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Vertex;
@ -53,30 +45,18 @@ import com.tinkerpop.blueprints.impls.orient.OrientGraph;
*
*/
@SuppressWarnings("rawtypes")
public abstract class RelationManagement<R extends Relation> {
public abstract class RelationManagement<R extends Relation> extends ERManagement<R, Edge> {
private static Logger logger = LoggerFactory
.getLogger(RelationManagement.class);
public final Set<String> ignoreKeys;
public final Set<String> ignoreStartWithKeys;
public static final String AT = "@";
public static final String UNDERSCORE = "_";
protected final Class<R> relationClass;
protected final String baseType;
protected final Class<? extends Entity> targetEntityClass;
protected OrientGraph orientGraph;
protected UUID uuid;
protected JsonNode jsonNode;
protected String relationType;
protected Edge edge;
protected Edge element;
protected RelationManagement(Class<R> relationClass) {
this.ignoreKeys = new HashSet<String>();
super(relationClass);
this.ignoreKeys.add(Relation.HEADER_PROPERTY);
this.ignoreKeys.add(Relation.TARGET_PROPERTY);
this.ignoreKeys.add(Relation.SOURCE_PROPERTY);
@ -85,12 +65,6 @@ public abstract class RelationManagement<R extends Relation> {
this.ignoreKeys.add(OrientBaseGraph.CONNECTION_IN.toUpperCase());
this.ignoreKeys.add(OrientBaseGraph.CONNECTION_OUT.toUpperCase());
this.ignoreStartWithKeys = new HashSet<String>();
this.ignoreStartWithKeys.add(AT);
this.ignoreStartWithKeys.add(UNDERSCORE);
this.relationClass = relationClass;
if (ConsistsOf.class.isAssignableFrom(relationClass)) {
this.baseType = ConsistsOf.NAME;
this.targetEntityClass = Facet.class;
@ -108,127 +82,14 @@ public abstract class RelationManagement<R extends Relation> {
this.orientGraph = orientGraph;
}
public void setEdge(Edge edge) {
this.edge = edge;
}
public void setUUID(UUID uuid) throws ResourceRegistryException {
this.uuid = uuid;
if (jsonNode != null) {
checkUUIDMatch();
}
}
protected void checkJSON() throws ResourceRegistryException {
if (uuid == null) {
try {
uuid = org.gcube.informationsystem.impl.utils.Utility
.getUUIDFromJsonNode(jsonNode);
} catch (Exception e) {
}
} else {
checkUUIDMatch();
}
if (this.relationType == null) {
this.relationType = ERManagement.getClassProperty(jsonNode);
} else {
checkEntityMatch();
}
}
public void setJSON(JsonNode jsonNode) throws ResourceRegistryException {
this.jsonNode = jsonNode;
checkJSON();
}
public void setJSON(String jsonRepresentation)
throws ResourceRegistryException {
ObjectMapper mapper = new ObjectMapper();
try {
this.jsonNode = mapper.readTree(jsonRepresentation);
} catch (IOException e) {
throw new ResourceRegistryException(e);
}
checkJSON();
}
public void setRelationType(String relationType)
throws ResourceRegistryException {
this.relationType = relationType;
if (relationType == null || relationType.compareTo("") == 0) {
if (ConsistsOf.class.isAssignableFrom(relationClass)) {
this.relationType = ConsistsOf.NAME;
} else if (IsRelatedTo.class.isAssignableFrom(relationClass)) {
this.relationType = IsRelatedTo.NAME;
}
}
if (jsonNode != null) {
checkEntityMatch();
}
}
protected void checkEntityMatch() throws ResourceRegistryException {
String type = ERManagement.getClassProperty(jsonNode);
if (type != null && type.compareTo(relationType) != 0) {
String error = String
.format("Declared resourceType does not match with json representation %s!=%s",
relationType, type);
logger.trace(error);
throw new ResourceRegistryException(error);
}
try {
SchemaManagementImpl.getTypeSchema(relationType, baseType);
} catch (SchemaNotFoundException e) {
throw e;
}
}
protected void checkUUIDMatch() throws ResourceRegistryException {
Header header = null;
try {
header = HeaderUtility.getHeader(jsonNode, false);
} catch (Exception e) {
throw new ResourceRegistryException(e);
}
if (header != null) {
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(),
relationType);
throw new ResourceRegistryException(error);
}
}
}
public Edge getEdge() throws ResourceRegistryException {
try {
if (edge == null) {
edge = Utility.getElementByUUID(orientGraph,
relationType == null ? baseType : relationType, uuid,
Edge.class);
}
return edge;
} catch (ResourceRegistryException e) {
throw new RelationNotFoundException(e);
}
}
public String serialize() throws ResourceRegistryException {
return serializeAsJson().toString();
}
public JSONObject serializeAsJson() throws ResourceRegistryException {
JSONObject ret = Utility.toJsonObject((OrientEdge) getEdge(), false);
JSONObject ret = Utility.toJsonObject((OrientEdge) getElement(), false);
Vertex vertex = edge.getVertex(Direction.IN);
Vertex vertex = element.getVertex(Direction.IN);
EntityManagement entityManagement = EntityManagement
.getEntityManagement(orientGraph, vertex);
@ -246,11 +107,11 @@ public abstract class RelationManagement<R extends Relation> {
throws ResourceRegistryException {
ResourceManagement srmSource = new ResourceManagement(orientGraph);
srmSource.setUUID(sourceUUID);
Vertex source = srmSource.getVertex();
Vertex source = srmSource.getElement();
EntityManagement entityManagement = getEntityManagement();
entityManagement.setUUID(targetUUID);
Vertex target = entityManagement.getVertex();
Vertex target = (Vertex) entityManagement.getElement();
return reallyCreate(source, target);
@ -268,7 +129,7 @@ public abstract class RelationManagement<R extends Relation> {
"Any type of %s can have only a %s as %s. "
+ "Cannot instatiate %s beetween %s -> %s ",
Relation.NAME, Resource.NAME, Relation.SOURCE_PROPERTY,
relationType, sourceEntityManagement.serialize(),
erType, sourceEntityManagement.serialize(),
targetEntityManagement.serialize());
throw new ResourceRegistryException(error);
}
@ -277,7 +138,7 @@ public abstract class RelationManagement<R extends Relation> {
if (!(targetEntityManagement instanceof ResourceManagement)) {
String error = String.format("A %s can have only a %s as %s. "
+ "Cannot instatiate %s beetween %s -> %s ", baseType,
Resource.NAME, Relation.TARGET_PROPERTY, relationType,
Resource.NAME, Relation.TARGET_PROPERTY, erType,
sourceEntityManagement.serialize(),
targetEntityManagement.serialize());
throw new ResourceRegistryException(error);
@ -286,7 +147,7 @@ public abstract class RelationManagement<R extends Relation> {
if (!(targetEntityManagement instanceof FacetManagement)) {
String error = String.format("A %s can have only a %s as %s. "
+ "Cannot instatiate %s beetween %s -> %s ", baseType,
Facet.NAME, Relation.TARGET_PROPERTY, relationType,
Facet.NAME, Relation.TARGET_PROPERTY, erType,
sourceEntityManagement.serialize(),
targetEntityManagement.serialize());
throw new ResourceRegistryException(error);
@ -300,23 +161,23 @@ public abstract class RelationManagement<R extends Relation> {
throw new ResourceRegistryException(error);
}
logger.trace("Creating {} beetween {} -> {}", relationType,
logger.trace("Creating {} beetween {} -> {}", erType,
sourceEntityManagement.serialize(),
targetEntityManagement.serialize());
edge = orientGraph.addEdge(null, source, target, relationType);
element = orientGraph.addEdge(null, source, target, erType);
ERManagement.updateProperties(edge, jsonNode, ignoreKeys,
ERManagement.updateProperties(element, jsonNode, ignoreKeys,
ignoreStartWithKeys);
HeaderUtility.addHeader(edge, null);
ContextUtility.addToActualContext(orientGraph, edge);
HeaderUtility.addHeader(element, null);
ContextUtility.addToActualContext(orientGraph, element);
((OrientEdge) edge).save();
((OrientEdge) element).save();
logger.info("{} successfully created", relationType);
logger.info("{} successfully created", erType);
return edge;
return element;
}
public Edge reallyCreate(Vertex source) throws ResourceRegistryException {
@ -329,7 +190,7 @@ public abstract class RelationManagement<R extends Relation> {
}
entityManagement.setJSON(jsonNode.get(Relation.TARGET_PROPERTY));
try {
target = entityManagement.getVertex();
target = (Vertex) entityManagement.getElement();
} catch (Exception e) {
target = entityManagement.reallyCreate();
}
@ -339,18 +200,18 @@ public abstract class RelationManagement<R extends Relation> {
public Edge reallyCreate(UUID sourceUUID) throws ResourceRegistryException {
ResourceManagement srmSource = new ResourceManagement(orientGraph);
srmSource.setUUID(sourceUUID);
Vertex source = srmSource.getVertex();
Vertex source = srmSource.getElement();
return reallyCreate(source);
}
public Edge reallyUpdate() throws ResourceRegistryException {
logger.debug("Trying to update {} : {}", relationType, jsonNode);
logger.debug("Trying to update {} : {}", erType, jsonNode);
Edge edge = getEdge();
Edge edge = getElement();
ERManagement.updateProperties(edge, jsonNode, ignoreKeys, ignoreStartWithKeys);
if (ConsistsOf.class.isAssignableFrom(relationClass)) {
if (ConsistsOf.class.isAssignableFrom(erClass)) {
JsonNode target = jsonNode.get(Relation.TARGET_PROPERTY);
if (target != null) {
FacetManagement fm = new FacetManagement(orientGraph);
@ -359,7 +220,7 @@ public abstract class RelationManagement<R extends Relation> {
}
}
logger.info("{} {} successfully updated", relationType, jsonNode);
logger.info("{} {} successfully updated", erType, jsonNode);
return edge;
@ -367,13 +228,13 @@ public abstract class RelationManagement<R extends Relation> {
public boolean reallyAddToContext() throws ContextException,
ResourceRegistryException {
getEdge();
getElement();
AddConstraint addConstraint = AddConstraint.unpropagate;
try {
PropagationConstraint propagationConstraint = Utility.getEmbedded(
PropagationConstraint.class, edge,
PropagationConstraint.class, element,
Relation.PROPAGATION_CONSTRAINT);
if (propagationConstraint.getAddConstraint() != null) {
addConstraint = propagationConstraint.getAddConstraint();
@ -383,10 +244,10 @@ public abstract class RelationManagement<R extends Relation> {
+ "This is really strange and should not occur. "
+ "Please Investigate it.",
Relation.PROPAGATION_CONSTRAINT,
Utility.toJsonString(edge, true), addConstraint);
Utility.toJsonString(element, true), addConstraint);
}
Vertex target = edge.getVertex(Direction.IN);
Vertex target = element.getVertex(Direction.IN);
switch (addConstraint) {
case propagate:
@ -395,7 +256,7 @@ public abstract class RelationManagement<R extends Relation> {
* must be added. Otherwise we have a relation which point
* to an entity outside of the context.
*/
ContextUtility.addToActualContext(orientGraph, getEdge());
ContextUtility.addToActualContext(orientGraph, getElement());
EntityManagement entityManagement = EntityManagement
.getEntityManagement(orientGraph, target);
entityManagement.reallyAddToContext();
@ -425,13 +286,13 @@ public abstract class RelationManagement<R extends Relation> {
public boolean reallyRemoveFromContext() throws ContextException,
ResourceRegistryException {
getEdge();
getElement();
RemoveConstraint removeConstraint = RemoveConstraint.keep;
try {
PropagationConstraint propagationConstraint = Utility.getEmbedded(
PropagationConstraint.class, edge,
PropagationConstraint.class, element,
Relation.PROPAGATION_CONSTRAINT);
if (propagationConstraint.getRemoveConstraint() != null) {
removeConstraint = propagationConstraint.getRemoveConstraint();
@ -441,16 +302,16 @@ public abstract class RelationManagement<R extends Relation> {
+ "This is really strange and should not occur. "
+ "Please Investigate it.",
Relation.PROPAGATION_CONSTRAINT,
Utility.toJsonString(edge, true), removeConstraint);
Utility.toJsonString(element, true), removeConstraint);
}
Vertex target = edge.getVertex(Direction.IN);
Vertex target = element.getVertex(Direction.IN);
/*
* In any removeConstraint value the relation MUSt be removed from
* context to avoid to have edge having a source outside of the context.
*/
ContextUtility.removeFromActualContext(orientGraph, edge);
ContextUtility.removeFromActualContext(orientGraph, element);
switch (removeConstraint) {
case cascade:
@ -463,7 +324,7 @@ public abstract class RelationManagement<R extends Relation> {
if (iterator.hasNext()) {
logger.trace(
"{} point to {} which is not orphan. Giving {} directive, it will be not remove from current context.",
edge, target, removeConstraint);
element, target, removeConstraint);
} else {
removeFromContextTargetVertex(target);
}
@ -482,20 +343,21 @@ public abstract class RelationManagement<R extends Relation> {
protected EntityManagement getEntityManagement()
throws ResourceRegistryException {
EntityManagement entityManagement;
if (ConsistsOf.class.isAssignableFrom(relationClass)) {
if (ConsistsOf.class.isAssignableFrom(erClass)) {
entityManagement = new FacetManagement(orientGraph);
} else if (IsRelatedTo.class.isAssignableFrom(relationClass)) {
} else if (IsRelatedTo.class.isAssignableFrom(erClass)) {
entityManagement = new ResourceManagement(orientGraph);
} else {
String error = String.format("{%s is not a %s nor a %s. "
+ "This is really strange ad should not occur. "
+ "Please Investigate it.", relationClass, ConsistsOf.NAME,
+ "Please Investigate it.", erClass, ConsistsOf.NAME,
IsRelatedTo.NAME);
throw new ResourceRegistryException(error);
}
return entityManagement;
}
@SuppressWarnings("unchecked")
public static RelationManagement getRelationManagement(
OrientGraph orientGraph, Edge edge)
throws ResourceRegistryException {
@ -512,7 +374,7 @@ public abstract class RelationManagement<R extends Relation> {
IsRelatedTo.NAME);
throw new ResourceRegistryException(error);
}
relationManagement.setEdge(edge);
relationManagement.setElement(edge);
return relationManagement;
}
@ -530,13 +392,17 @@ public abstract class RelationManagement<R extends Relation> {
public boolean reallyDelete() throws RelationNotFoundException,
ResourceRegistryException {
getEdge();
logger.debug(
"Going to remove {} with UUID {}. Related {}s will be detached.",
baseType, uuid, targetEntityClass.getSimpleName());
getElement();
RemoveConstraint removeConstraint = RemoveConstraint.keep;
try {
PropagationConstraint propagationConstraint = Utility.getEmbedded(
PropagationConstraint.class, edge,
PropagationConstraint.class, element,
Relation.PROPAGATION_CONSTRAINT);
if (propagationConstraint.getRemoveConstraint() != null) {
removeConstraint = propagationConstraint.getRemoveConstraint();
@ -546,34 +412,34 @@ public abstract class RelationManagement<R extends Relation> {
+ "This is really strange and should not occur. "
+ "Please Investigate it.",
Relation.PROPAGATION_CONSTRAINT,
Utility.toJsonString(edge, true), removeConstraint);
Utility.toJsonString(element, true), removeConstraint);
}
Vertex target = edge.getVertex(Direction.IN);
edge.remove();
Vertex target = element.getVertex(Direction.IN);
element.remove();
switch (removeConstraint) {
case cascade:
deleteTargetVertex(target);
break;
case cascadeWhenOrphan:
Iterable<Edge> iterable = target.getEdges(Direction.IN);
Iterator<Edge> iterator = iterable.iterator();
if (iterator.hasNext()) {
logger.trace(
"{} point to {} which is not orphan. Giving {} directive, it will be keep.",
edge, target, removeConstraint);
} else {
case cascade:
deleteTargetVertex(target);
}
break;
case keep:
break;
default:
break;
break;
case cascadeWhenOrphan:
Iterable<Edge> iterable = target.getEdges(Direction.IN);
Iterator<Edge> iterator = iterable.iterator();
if (iterator.hasNext()) {
logger.trace(
"{} point to {} which is not orphan. Giving {} directive, it will be keep.",
element, target, removeConstraint);
} else {
deleteTargetVertex(target);
}
break;
case keep:
break;
default:
break;
}
return true;
@ -585,7 +451,7 @@ public abstract class RelationManagement<R extends Relation> {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.WRITER);
edge = reallyCreate(sourceUUID, targetUUID);
element = reallyCreate(sourceUUID, targetUUID);
orientGraph.commit();
@ -608,160 +474,4 @@ public abstract class RelationManagement<R extends Relation> {
}
}
public String read() throws RelationNotFoundException,
ResourceRegistryException {
try {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.WRITER);
return serialize();
} catch (ResourceRegistryException e) {
if (orientGraph != null) {
orientGraph.rollback();
}
throw e;
} catch (Exception e) {
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ResourceRegistryException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public String update() throws RelationNotFoundException,
ResourceRegistryException {
try {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.WRITER);
edge = reallyUpdate();
return serialize();
} catch (ResourceRegistryException e) {
if (orientGraph != null) {
orientGraph.rollback();
}
throw e;
} catch (Exception e) {
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ResourceRegistryException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public boolean delete() throws RelationNotFoundException,
ResourceRegistryException {
logger.debug(
"Going to remove {} with UUID {}. Related {}s will be detached.",
baseType, uuid, targetEntityClass.getSimpleName());
try {
orientGraph = ContextUtility
.getActualSecurityContextGraph(PermissionMode.WRITER);
boolean deleted = reallyDelete();
orientGraph.commit();
logger.info("{} {} with UUID {} successfully removed.", baseType,
uuid);
return deleted;
} catch (ResourceRegistryException e) {
logger.error("Unable to remove {} with UUID.", baseType, uuid);
if (orientGraph != null) {
orientGraph.rollback();
}
throw e;
} catch (Exception e) {
logger.error("Unable to remove {} with UUID {}.", baseType, uuid);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ResourceRegistryException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public boolean addToContext() throws ContextException {
logger.debug("Going to add {} with UUID {} to actual Context",
baseType, uuid);
try {
orientGraph = SecurityContextMapper.getSecurityContextFactory(
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
PermissionMode.WRITER).getTx();
boolean added = reallyAddToContext();
orientGraph.commit();
logger.info("{} with UUID {} successfully added to actual Context",
baseType, uuid);
return added;
} catch (Exception e) {
logger.error("Unable to add {} with UUID {} to actual Context",
baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ContextException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
public boolean removeFromContext() throws ContextException {
logger.debug("Going to remove {} with UUID {} from actual Context",
baseType, uuid);
try {
orientGraph = SecurityContextMapper.getSecurityContextFactory(
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
PermissionMode.WRITER).getTx();
boolean removed = reallyRemoveFromContext();
orientGraph.commit();
logger.info(
"{} with UUID {} successfully removed from actual Context",
baseType, uuid);
return removed;
} catch (Exception e) {
logger.error(
"Unable to remove {} with UUID {} from actual Context",
baseType, uuid, e);
if (orientGraph != null) {
orientGraph.rollback();
}
throw new ContextException(e);
} finally {
if (orientGraph != null) {
orientGraph.shutdown();
}
}
}
}

View File

@ -12,12 +12,14 @@ import javax.ws.rs.core.MediaType;
import org.gcube.informationsystem.resourceregistry.api.exceptions.InvalidQueryException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
import org.gcube.informationsystem.resourceregistry.api.rest.AccessPath;
import org.gcube.informationsystem.resourceregistry.er.ERManagement;
import org.gcube.informationsystem.resourceregistry.er.entity.FacetManagement;
import org.gcube.informationsystem.resourceregistry.er.entity.ResourceManagement;
import org.gcube.informationsystem.resourceregistry.er.relation.ConsistsOfManagement;
import org.gcube.informationsystem.resourceregistry.er.relation.IsRelatedToManagement;
import org.gcube.informationsystem.resourceregistry.query.Query;
import org.gcube.informationsystem.resourceregistry.query.QueryImpl;
import org.gcube.informationsystem.resourceregistry.schema.SchemaManagement;
@ -36,27 +38,31 @@ public class Access {
public static final String ID_PATH_PARAM = "id";
public static final String TYPE_PATH_PARAM = "type";
/**
* It allows to query Entities and Relations in the current Context.<br />
* It accepts idempotent query only..
* <br /><br />
* For query syntax please refer to<br />
* It includeSubtypesows to query Entities and Relations in the current Context.<br />
* It accepts idempotent query only.. <br />
* <br />
* For query syntax please refer to<br />
* <a href="https://orientdb.com/docs/last/SQL-Syntax.html" target="_blank">
* https://orientdb.com/docs/last/SQL-Syntax.html
* </a>
* <br /><br />
* https://orientdb.com/docs/last/SQL-Syntax.html </a> <br />
* <br />
* e.g. GET /resource-registry/access?query=SELECT FROM V
* @param query Defines the query to send to the backend.
* @param limit Defines the number of results you want returned,
* defaults to all results.
* @param fetchPlan Defines the fetching strategy you want to use. See
* <a href="https://orientdb.com/docs/last/Fetching-Strategies.html"
* target="_blank">
* https://orientdb.com/docs/last/Fetching-Strategies.html
* </a>
*
* @param query
* Defines the query to send to the backend.
* @param limit
* Defines the number of results you want returned, defaults to
* includeSubtypes results.
* @param fetchPlan
* Defines the fetching strategy you want to use. See <a
* href="https://orientdb.com/docs/last/Fetching-Strategies.html"
* target="_blank">
* https://orientdb.com/docs/last/Fetching-Strategies.html </a>
* @return The JSON representation of the result
* @throws InvalidQueryException if the query is invalid or no idempotent
* @throws InvalidQueryException
* if the query is invalid or no idempotent
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
@ -64,100 +70,254 @@ public class Access {
@QueryParam(AccessPath.LIMIT_PARAM) int limit,
@QueryParam(AccessPath.FETCH_PLAN_PARAM) String fetchPlan)
throws InvalidQueryException {
logger.info("Requested query (fetch plan {}, limit : {}):\n{}", fetchPlan, limit, query);
logger.info("Requested query (fetch plan {}, limit : {}):\n{}",
fetchPlan, limit, query);
Query queryManager = new QueryImpl();
return queryManager.query(query, limit, fetchPlan);
}
/**
* e.g. GET /resource-registry/access/facet/instance/4d28077b-566d-4132-b073-f4edaf61dcb9
* @param facetId
* @return
* @throws FacetNotFoundException
* @throws ResourceRegistryException
@SuppressWarnings("rawtypes")
public static ERManagement getERManagement(AccessType querableType) throws ResourceRegistryException {
switch (querableType) {
case FACET:
return new FacetManagement();
case RESOURCE:
return new ResourceManagement();
case IS_RELATED_TO:
return new IsRelatedToManagement();
case CONSISTS_OF:
return new ConsistsOfManagement();
default:
throw new ResourceRegistryException(String.format("%s is not querable", querableType.toString()));
}
}
/*
* e.g. GET /resource-registry/access/instance/{E-R}/4d28077b-566d-4132-b073-f4edaf61dcb9
*/
@GET
@Path(AccessPath.FACET_PATH_PART + "/" + AccessPath.INSTANCE_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@GET
@Path(AccessPath.INSTANCE_PATH_PART + "/" + "{" + TYPE_PATH_PARAM +"}"
+ "/{" + ID_PATH_PARAM + "}")
@Produces(MediaType.APPLICATION_JSON)
public String getFacet(@PathParam(ID_PATH_PARAM) String facetId)
public String getInstance(
@PathParam(ID_PATH_PARAM) String type,
@PathParam(ID_PATH_PARAM) String facetId)
throws ResourceRegistryException {
logger.info("Requested Facet with id {}", facetId);
AccessType querableType = null;
try {
querableType = AccessType.valueOf(type);
}catch(Exception e){
String error = String.format("%s is not querable", type);
throw new ResourceRegistryException(error);
}
@SuppressWarnings("rawtypes")
ERManagement erManagement = getERManagement(querableType);
erManagement.setUUID(UUID.fromString(facetId));
return erManagement.read();
}
/*
* e.g. GET /resource-registry/access/instances/{E-R}?polymorphic=true
*/
@GET
@Path(AccessPath.INSTANCE_PATH_PART + "s/" + "{" + TYPE_PATH_PARAM +"}"
+ "/{" + ID_PATH_PARAM + "}")
@Produces(MediaType.APPLICATION_JSON)
public String getInstances(
@PathParam(ID_PATH_PARAM) String type,
@PathParam(ID_PATH_PARAM) String facetId)
throws FacetNotFoundException, ResourceRegistryException {
logger.info("Requested Facet with id {}", facetId);
FacetManagement facetManagement = new FacetManagement();
facetManagement.setUUID(UUID.fromString(facetId));
return facetManagement.read();
}
/**
* e.g. GET /resource-registry/access/facet/schema/ContactFacet
* @param facetType
* @return
* @throws SchemaNotFoundException
*/
@GET
@Path(AccessPath.FACET_PATH_PART + "/" + AccessPath.SCHEMA_PATH_PART + "/{" + TYPE_PATH_PARAM + "}")
@Produces(MediaType.APPLICATION_JSON)
public String getFacetSchema(@PathParam(TYPE_PATH_PARAM) String facetType)
throws SchemaNotFoundException {
logger.info("Requested Facet Schema for type {}", facetType);
SchemaManagement schemaManager = new SchemaManagementImpl();
return schemaManager.getFacetSchema(facetType);
AccessType querableType = null;
try {
querableType = AccessType.valueOf(type);
}catch(Exception e){
String error = String.format("%s is not querable", type);
throw new ResourceRegistryException(error);
}
// TODO
return null;
}
/**
* e.g. GET /resource-registry/access/resource/instance/cc132a2c-d0b0-45a8-92fa-7451f6a44b6d
* @param resourceId
* @return
* @throws ResourceNotFoundException
* @throws ResourceRegistryException
/*
* e.g. GET /resource-registry/access/schema/Facet/ContactFacet?
* includeSubtypes=true&
* includeSchema=true
*/
@GET
@Path(AccessPath.RESOURCE_PATH_PART + "/" + AccessPath.INSTANCE_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@Path(AccessPath.SCHEMA_PATH_PART + "/{"
+ TYPE_PATH_PARAM + "}")
@Produces(MediaType.APPLICATION_JSON)
public String getResource(@PathParam(ID_PATH_PARAM) String resourceId)
throws ResourceNotFoundException, ResourceRegistryException {
logger.info("Requested Resource with id {}", resourceId);
ResourceManagement resourceManagement = new ResourceManagement();
resourceManagement.setUUID(UUID.fromString(resourceId));
return resourceManagement.read();
public String getSchema(@PathParam(TYPE_PATH_PARAM) String type,
@QueryParam(AccessPath.INCLUDE_SUBTYPES_PARAM) Boolean includeSubtypes,
@QueryParam(AccessPath.INCLUDE_SCHEMA_PARAM) Boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
logger.info("Requested Facet Schema for type {}", type);
SchemaManagement schemaManagement = new SchemaManagementImpl();
// TODO
return schemaManagement.readFacetSchema(type, includeSubtypes,
includeSchema);
}
// /*
// * e.g. GET /resource-registry/access/facet/instance/
// * 4d28077b-566d-4132-b073-f4edaf61dcb9
// */
// @GET
// @Path(AccessPath.FACET_PATH_PART + "/" + AccessPath.INSTANCE_PATH_PART
// + "/{" + ID_PATH_PARAM + "}")
// @Produces(MediaType.APPLICATION_JSON)
// public String getFacet(@PathParam(ID_PATH_PARAM) String facetId)
// throws FacetNotFoundException, ResourceRegistryException {
// logger.info("Requested Facet with id {}", facetId);
// FacetManagement facetManagement = new FacetManagement();
// facetManagement.setUUID(UUID.fromString(facetId));
// return facetManagement.read();
// }
//
// /*
// * e.g. GET /resource-registry/access/facet/schema/ContactFacet?
// * includeSubtypes=true&
// * includeSchema=true
// *
// */
// @GET
// @Path(AccessPath.FACET_PATH_PART + "/" + AccessPath.SCHEMA_PATH_PART + "/{"
// + TYPE_PATH_PARAM + "}")
// @Produces(MediaType.APPLICATION_JSON)
// public String getFacetSchema(@PathParam(TYPE_PATH_PARAM) String facetType,
// @QueryParam(AccessPath.INCLUDE_SUBTYPES_PARAM) Boolean includeSubtypes,
// @QueryParam(AccessPath.INCLUDE_SCHEMA_PARAM) Boolean includeSchema)
// throws SchemaNotFoundException, SchemaException {
// logger.info("Requested Facet Schema for type {}", facetType);
// SchemaManagement schemaManagement = new SchemaManagementImpl();
// return schemaManagement.readFacetSchema(facetType, includeSubtypes,
// includeSchema);
// }
//
// /*
// * e.g. GET /resource-registry/access/resource/instance/
// * cc132a2c-d0b0-45a8-92fa-7451f6a44b6d
// */
// @GET
// @Path(AccessPath.RESOURCE_PATH_PART + "/" + AccessPath.INSTANCE_PATH_PART
// + "/{" + ID_PATH_PARAM + "}")
// @Produces(MediaType.APPLICATION_JSON)
// public String getResource(@PathParam(ID_PATH_PARAM) String resourceId)
// throws ResourceNotFoundException, ResourceRegistryException {
// logger.info("Requested Resource with id {}", resourceId);
// ResourceManagement resourceManagement = new ResourceManagement();
// resourceManagement.setUUID(UUID.fromString(resourceId));
// return resourceManagement.read();
// }
//
//
//
//
// /*
// * e.g. GET /resource-registry/access/resource/schema/HostingNode?
// * includeSubtypes=true&
// * includeSchema=true
// */
// @GET
// @Path(AccessPath.RESOURCE_PATH_PART + "/" + AccessPath.SCHEMA_PATH_PART
// + "/{" + TYPE_PATH_PARAM + "}")
// @Produces(MediaType.APPLICATION_JSON)
// public String getResourceSchema(
// @PathParam(TYPE_PATH_PARAM) String resourceType,
// @QueryParam(AccessPath.INCLUDE_SUBTYPES_PARAM) Boolean includeSubtypes,
// @QueryParam(AccessPath.INCLUDE_SCHEMA_PARAM) Boolean includeSchema)
// throws SchemaNotFoundException, SchemaException {
// logger.info("Requested Resource Schema for type {}", resourceType);
// SchemaManagement schemaManagement = new SchemaManagementImpl();
// return schemaManagement.getResourceSchema(resourceType,
// includeSubtypes, includeSchema);
// }
//
// /*
// * e.g. GET /resource-registry/access/embedded/schema/Embedded?
// * includeSubtypes=true&
// * includeSchema=true
// */
// @GET
// @Path(AccessPath.EMBEDDED_PATH_PART + "/" + AccessPath.SCHEMA_PATH_PART
// + "/{" + TYPE_PATH_PARAM + "}")
// @Produces(MediaType.APPLICATION_JSON)
// public String getEmbeddedSchema(
// @PathParam(TYPE_PATH_PARAM) String embeddedType,
// @QueryParam(AccessPath.INCLUDE_SUBTYPES_PARAM) Boolean includeSubtypes,
// @QueryParam(AccessPath.INCLUDE_SCHEMA_PARAM) Boolean includeSchema)
// throws SchemaNotFoundException, SchemaException {
// if (includeSchema == null) {
// includeSchema = false;
// }
// SchemaManagement schemaManagement = new SchemaManagementImpl();
// return schemaManagement.getEmbeddedTypeSchema(embeddedType,
// includeSubtypes, includeSchema);
// }
//
// /*
// * e.g. GET /resource-registry/access/consistsOf/schema/HasContact?
// * includeSubtypes=true&
// * includeSchema=true
// */
// @GET
// @Path(AccessPath.CONSISTS_OF_PATH_PART + "/" + AccessPath.SCHEMA_PATH_PART
// + "/{" + TYPE_PATH_PARAM + "}")
// @Produces(MediaType.APPLICATION_JSON)
// public String getConsistsOfSchema(
// @PathParam(TYPE_PATH_PARAM) String consistsOfType,
// @QueryParam(AccessPath.INCLUDE_SUBTYPES_PARAM) Boolean includeSubtypes,
// @QueryParam(AccessPath.INCLUDE_SCHEMA_PARAM) Boolean includeSchema)
// throws SchemaNotFoundException, SchemaException {
// if (includeSchema == null) {
// includeSchema = false;
// }
// SchemaManagement schemaManagement = new SchemaManagementImpl();
// return schemaManagement.getConsistsOfSchema(consistsOfType,
// includeSubtypes, includeSchema);
// }
//
// /*
// * e.g. GET /resource-registry/access/isRelatedTo/schema/HasContact?
// * includeSubtypes=true&
// * includeSchema=true
// */
// @GET
// @Path(AccessPath.IS_RELATED_TO_PATH_PART + "/"
// + AccessPath.SCHEMA_PATH_PART + "/{" + TYPE_PATH_PARAM + "}")
// @Produces(MediaType.APPLICATION_JSON)
// public String getIsRelatedToSchema(
// @PathParam(TYPE_PATH_PARAM) String isRelatedToType,
// @QueryParam(AccessPath.INCLUDE_SUBTYPES_PARAM) Boolean includeSubtypes,
// @QueryParam(AccessPath.INCLUDE_SCHEMA_PARAM) Boolean includeSchema)
// throws SchemaNotFoundException, SchemaException {
// if (includeSchema == null) {
// includeSchema = false;
// }
// SchemaManagement schemaManagement = new SchemaManagementImpl();
// return schemaManagement.getIsRelatedToSchema(isRelatedToType,
// includeSubtypes, includeSchema);
// }
/**
* e.g. GET /resource-registry/access/resource/schema/HostingNode
* @param resourceType
* @return
* @throws SchemaNotFoundException
*/
@GET
@Path(AccessPath.RESOURCE_PATH_PART + "/" + AccessPath.SCHEMA_PATH_PART + "/{" + TYPE_PATH_PARAM + "}")
@Produces(MediaType.APPLICATION_JSON)
public String getResourceSchema(@PathParam(TYPE_PATH_PARAM) String resourceType)
throws SchemaNotFoundException {
logger.info("Requested Resource Schema for type {}", resourceType);
SchemaManagement schemaManager = new SchemaManagementImpl();
return schemaManager.getResourceSchema(resourceType);
}
public String getResourceTypes(String resourceType, boolean includeSchema) throws SchemaNotFoundException, SchemaException {
throw new UnsupportedOperationException("Not Yet implemented");
}
public String getEmbeddedTypes(String embeddedType, boolean includeSchema) throws SchemaNotFoundException, SchemaException {
throw new UnsupportedOperationException("Not Yet implemented");
}
public String getRelationTypes(String relationType, boolean includeSchema) throws SchemaNotFoundException, SchemaException {
throw new UnsupportedOperationException("Not Yet implemented");
}
public String getConsistsOfTypes(String consistsOfType, boolean includeSchema) throws SchemaNotFoundException, SchemaException {
throw new UnsupportedOperationException("Not Yet implemented");
}
public String getIsRelatedToTypes(String isRelatedToType, boolean includeSchema) throws SchemaNotFoundException, SchemaException {
throw new UnsupportedOperationException("Not Yet implemented");
}
}

View File

@ -0,0 +1,45 @@
/**
*
*/
package org.gcube.informationsystem.resourceregistry.rest;
import org.gcube.informationsystem.model.entity.Entity;
import org.gcube.informationsystem.model.entity.Facet;
import org.gcube.informationsystem.model.entity.Resource;
import org.gcube.informationsystem.model.relation.ConsistsOf;
import org.gcube.informationsystem.model.relation.IsRelatedTo;
import org.gcube.informationsystem.model.relation.Relation;
/**
* @author Luca Frosini (ISTI - CNR)
*
* Enumerates the basic type names.
*/
public enum AccessType {
ENTITY(Entity.NAME),
RESOURCE(Resource.NAME),
FACET(Facet.NAME),
RELATION(Relation.NAME),
IS_RELATED_TO(IsRelatedTo.NAME),
CONSISTS_OF(ConsistsOf.NAME);
private final String name;
private final String lowerCaseFirstCharacter;
AccessType(String name){
this.name = name;
this.lowerCaseFirstCharacter = name.substring(0, 1).toLowerCase() + name.substring(1);
}
public String lowerCaseFirstCharacter() {
return lowerCaseFirstCharacter;
}
@Override
public String toString(){
return name;
}
}

View File

@ -20,7 +20,7 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.context.Conte
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.EntityException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetNotFoundException;
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.ERPath;
import org.gcube.informationsystem.resourceregistry.context.ContextUtility;
import org.gcube.informationsystem.resourceregistry.er.entity.FacetManagement;
import org.gcube.informationsystem.resourceregistry.er.entity.ResourceManagement;
@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory;
* @author Luca Frosini (ISTI - CNR)
* @author Lucio Lelii (ISTI - CNR)
*/
@Path(EntityPath.ENTITY_PATH_PART)
@Path(ERPath.ER_PATH_PART)
public class ERManager {
private static Logger logger = LoggerFactory.getLogger(SchemaManager.class);
@ -57,7 +57,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@PUT
@Path(EntityPath.FACET_PATH_PART + "/{" + TYPE_PATH_PARAM + "}")
@Path(ERPath.FACET_PATH_PART + "/{" + TYPE_PATH_PARAM + "}")
@Consumes({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
@Produces(MediaType.APPLICATION_JSON)
public String createFacet(@PathParam(TYPE_PATH_PARAM) String type,
@ -65,7 +65,7 @@ public class ERManager {
logger.info("requested facet creation for type {} defined by {} ",
type, json);
FacetManagement facetManagement = new FacetManagement();
facetManagement.setEntityType(type);
facetManagement.setElementType(type);
facetManagement.setJSON(json);
return facetManagement.create();
}
@ -83,7 +83,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@POST
@Path(EntityPath.FACET_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@Path(ERPath.FACET_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@Consumes({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
@Produces(MediaType.APPLICATION_JSON)
public String updateFacet(@PathParam(ID_PATH_PARAM) String uuid, String json)
@ -105,7 +105,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@DELETE
@Path(EntityPath.FACET_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@Path(ERPath.FACET_PATH_PART + "/{" + ID_PATH_PARAM + "}")
public boolean deleteFacet(@PathParam(ID_PATH_PARAM) String uuid)
throws FacetNotFoundException, ResourceRegistryException {
logger.info("Requested to delete Facet with id {}", uuid);
@ -128,7 +128,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@PUT
@Path(EntityPath.RESOURCE_PATH_PART + "/{" + TYPE_PATH_PARAM + "}")
@Path(ERPath.RESOURCE_PATH_PART + "/{" + TYPE_PATH_PARAM + "}")
@Consumes({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
@Produces(MediaType.APPLICATION_JSON)
public String createResource(@PathParam(TYPE_PATH_PARAM) String type,
@ -137,13 +137,13 @@ public class ERManager {
logger.info("requested resource creation for type {} with json {}",
type, json);
ResourceManagement resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(type);
resourceManagement.setElementType(type);
resourceManagement.setJSON(json);
return resourceManagement.create();
}
@POST
@Path(EntityPath.RESOURCE_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@Path(ERPath.RESOURCE_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@Consumes({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
@Produces(MediaType.APPLICATION_JSON)
public String updateResource(@PathParam(ID_PATH_PARAM) String uuid,
@ -166,7 +166,7 @@ public class ERManager {
* @throws Exception
*/
@DELETE
@Path(EntityPath.RESOURCE_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@Path(ERPath.RESOURCE_PATH_PART + "/{" + ID_PATH_PARAM + "}")
public boolean deleteResource(@PathParam(ID_PATH_PARAM) String uuid)
throws ResourceNotFoundException, Exception {
logger.info("requested resource deletion for id {}", uuid);
@ -194,8 +194,8 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@PUT
@Path(EntityPath.CONSISTS_OF_PATH_PART + "/" + EntityPath.SOURCE_PATH_PART
+ "/{" + SOURCE_ID_PATH_PARAM + "}/" + EntityPath.TARGET_PATH_PART
@Path(ERPath.CONSISTS_OF_PATH_PART + "/" + ERPath.SOURCE_PATH_PART
+ "/{" + SOURCE_ID_PATH_PARAM + "}/" + ERPath.TARGET_PATH_PART
+ "/{" + TARGET_ID_PATH_PARAM + "}/{" + TYPE_PATH_PARAM + "}")
@Produces(MediaType.APPLICATION_JSON)
public String attachFacet(
@ -209,7 +209,7 @@ public class ERManager {
resourceUUID, facetUUID, ConsistsOf.class.getSimpleName(),
type, json);
ConsistsOfManagement consistsOfManagement = new ConsistsOfManagement();
consistsOfManagement.setRelationType(type);
consistsOfManagement.setElementType(type);
consistsOfManagement.setJSON(json);
return consistsOfManagement.create(UUID.fromString(resourceUUID),
UUID.fromString(facetUUID));
@ -224,7 +224,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@DELETE
@Path(EntityPath.CONSISTS_OF_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@Path(ERPath.CONSISTS_OF_PATH_PART + "/{" + ID_PATH_PARAM + "}")
public boolean detachFacet(@PathParam(ID_PATH_PARAM) String consistOfUUID)
throws ResourceRegistryException {
logger.info("requested to detach {}", consistOfUUID);
@ -249,9 +249,9 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@PUT
@Path(EntityPath.IS_RELATED_TO_PATH_PART + "/"
+ EntityPath.SOURCE_PATH_PART + "/{" + SOURCE_ID_PATH_PARAM + "}/"
+ EntityPath.TARGET_PATH_PART + "/{" + TARGET_ID_PATH_PARAM + "}/{"
@Path(ERPath.IS_RELATED_TO_PATH_PART + "/"
+ ERPath.SOURCE_PATH_PART + "/{" + SOURCE_ID_PATH_PARAM + "}/"
+ ERPath.TARGET_PATH_PART + "/{" + TARGET_ID_PATH_PARAM + "}/{"
+ TYPE_PATH_PARAM + "}")
@Consumes({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
@Produces(MediaType.APPLICATION_JSON)
@ -267,7 +267,7 @@ public class ERManager {
json);
IsRelatedToManagement isRelatedToManagement = new IsRelatedToManagement();
isRelatedToManagement.setRelationType(type);
isRelatedToManagement.setElementType(type);
isRelatedToManagement.setJSON(json);
return isRelatedToManagement.create(
@ -284,7 +284,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@DELETE
@Path(EntityPath.IS_RELATED_TO_PATH_PART + "/{" + ID_PATH_PARAM + "}")
@Path(ERPath.IS_RELATED_TO_PATH_PART + "/{" + ID_PATH_PARAM + "}")
public boolean detachResource(@PathParam(ID_PATH_PARAM) String relatedToUUID)
throws ResourceRegistryException {
logger.info("requested to detach {}", relatedToUUID);
@ -304,7 +304,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@POST
@Path(EntityPath.ADD_PATH_PART + "/" + EntityPath.RESOURCE_PATH_PART + "/{"
@Path(ERPath.ADD_PATH_PART + "/" + ERPath.RESOURCE_PATH_PART + "/{"
+ ID_PATH_PARAM + "}")
public boolean addResourceToContext(@PathParam(ID_PATH_PARAM) String uuid)
throws ResourceNotFoundException, ContextNotFoundException,
@ -327,7 +327,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@POST
@Path(EntityPath.ADD_PATH_PART + "/" + EntityPath.FACET_PATH_PART + "/{"
@Path(ERPath.ADD_PATH_PART + "/" + ERPath.FACET_PATH_PART + "/{"
+ ID_PATH_PARAM + "}")
public boolean addFacetToContext(@PathParam(ID_PATH_PARAM) String uuid)
throws FacetNotFoundException, ContextNotFoundException,
@ -350,7 +350,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@POST
@Path(EntityPath.REMOVE_PATH_PART + "/" + EntityPath.RESOURCE_PATH_PART + "/{"
@Path(ERPath.REMOVE_PATH_PART + "/" + ERPath.RESOURCE_PATH_PART + "/{"
+ ID_PATH_PARAM + "}")
public boolean removeResourceFromContext(@PathParam(ID_PATH_PARAM) String uuid)
throws ResourceNotFoundException, ContextNotFoundException,
@ -373,7 +373,7 @@ public class ERManager {
* @throws ResourceRegistryException
*/
@POST
@Path(EntityPath.REMOVE_PATH_PART + "/" + EntityPath.FACET_PATH_PART + "/{"
@Path(ERPath.REMOVE_PATH_PART + "/" + ERPath.FACET_PATH_PART + "/{"
+ ID_PATH_PARAM + "}")
public boolean removeFacetFromContext(@PathParam(ID_PATH_PARAM) String uuid)
throws FacetNotFoundException, ContextNotFoundException,

View File

@ -28,8 +28,6 @@ public class SchemaManager {
private static Logger logger = LoggerFactory.getLogger(SchemaManager.class);
protected SchemaManagement schemaManager = new SchemaManagementImpl();
/**
* e.g. PUT /resource-registry/schema/embedded
*
@ -49,7 +47,8 @@ public class SchemaManager {
throws SchemaException {
logger.trace("Requested {} registration with schema {}", Embedded.NAME,
jsonSchema);
return schemaManager.registerEmbeddedTypeSchema(jsonSchema);
SchemaManagement schemaManagement = new SchemaManagementImpl();
return schemaManagement.registerEmbeddedTypeSchema(jsonSchema);
}
/**
@ -68,7 +67,8 @@ public class SchemaManager {
public String registerFacetSchema(String jsonSchema) throws SchemaException {
logger.trace("Requested {} registration with schema {}", Facet.NAME,
jsonSchema);
return schemaManager.registerFacetSchema(jsonSchema);
SchemaManagement schemaManagement = new SchemaManagementImpl();
return schemaManagement.createFacetSchema(jsonSchema);
}
/**
@ -89,7 +89,8 @@ public class SchemaManager {
throws SchemaException {
logger.trace("Requested {} registration with schema {}", Resource.NAME,
jsonSchema);
return schemaManager.registerResourceSchema(jsonSchema);
SchemaManagement schemaManagement = new SchemaManagementImpl();
return schemaManagement.registerResourceSchema(jsonSchema);
}
/**
@ -109,7 +110,8 @@ public class SchemaManager {
throws SchemaException {
logger.trace("Requested {} registration with schema {} ",
ConsistsOf.NAME, jsonSchema);
return schemaManager.registerConsistsOfSchema(jsonSchema);
SchemaManagement schemaManagement = new SchemaManagementImpl();
return schemaManagement.registerConsistsOfSchema(jsonSchema);
}
/**
@ -129,10 +131,8 @@ public class SchemaManager {
throws SchemaException {
logger.trace("Requested {} registration with schema {} ",
IsRelatedTo.NAME, jsonSchema);
return schemaManager.registerIsRelatedToSchema(jsonSchema);
SchemaManagement schemaManagement = new SchemaManagementImpl();
return schemaManagement.registerIsRelatedToSchema(jsonSchema);
}
}

View File

@ -0,0 +1,12 @@
/**
*
*/
package org.gcube.informationsystem.resourceregistry.schema;
/**
* @author Luca Frosini (ISTI - CNR)
*
*/
public class EntitySchemaManagement {
}

View File

@ -12,85 +12,76 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.Schema
*/
public interface SchemaManagement {
public String registerEntitySchema(String jsonSchema) throws SchemaException;
/*
public String create(String json) throws SchemaException;
public String getEntitySchema(String entityType) throws SchemaNotFoundException;
public String read(String type, boolean includeSubtypes, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String update(String type, String json) throws SchemaNotFoundException, SchemaException;
public String delete(String type) throws SchemaNotFoundException;
*/
public String createEntitySchema(String jsonSchema) throws SchemaException;
public String readEntitySchema(String entityType, boolean includeSubtypes, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String updateEntitySchema(String entityType, String jsonSchema) throws SchemaNotFoundException, SchemaException;
public String deleteEntitySchema(String entityType) throws SchemaNotFoundException;
public String getEntityTypes(String entityType, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String createFacetSchema(String jsonSchema) throws SchemaException;
public String registerFacetSchema(String jsonSchema) throws SchemaException;
public String getFacetSchema(String facetType) throws SchemaNotFoundException;
public String readFacetSchema(String facetType, boolean includeSubtypes, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String updateFacetSchema(String facetType, String jsonSchema) throws SchemaNotFoundException, SchemaException;
public String deleteFacetSchema(String facetType) throws SchemaNotFoundException;
public String getFacetTypes(String facetType, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String registerResourceSchema(String jsonSchema) throws SchemaException;
public String getResourceSchema(String resourceType) throws SchemaNotFoundException;
public String getResourceSchema(String resourceType, boolean includeSubtypes, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String updateResourceSchema(String resourceType, String jsonSchema) throws SchemaNotFoundException, SchemaException;
public String deleteResourceSchema(String resourceType) throws SchemaNotFoundException;
public String getResourceTypes(String resourceType, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String registerEmbeddedTypeSchema(String jsonSchema) throws SchemaException;
public String getEmbeddedTypeSchema(String embeddedType) throws SchemaNotFoundException;
public String getEmbeddedTypeSchema(String embeddedType, boolean includeSubtypes, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String updateEmbeddedTypeSchema(String embeddedType, String jsonSchema) throws SchemaNotFoundException, SchemaException;
public String deleteEmbeddedTypeSchema(String embeddedType) throws SchemaNotFoundException;
public String getEmbeddedTypes(String embeddedType, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String registerRelationSchema(String jsonSchema) throws SchemaException;
public String getRelationSchema(String relationType) throws SchemaNotFoundException;
public String getRelationSchema(String relationType, boolean includeSubtypes, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String updateRelationSchema(String relationType, String jsonSchema) throws SchemaNotFoundException, SchemaException;
public String deleteRelationSchema(String relationType) throws SchemaNotFoundException;
public String getRelationTypes(String relationType, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String registerConsistsOfSchema(String jsonSchema) throws SchemaException;
public String getConsistsOfSchema(String consistsOfType) throws SchemaNotFoundException;
public String getConsistsOfSchema(String consistsOfType, boolean includeSubtypes, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String updateConsistsOfSchema(String consistsOfType, String jsonSchema) throws SchemaNotFoundException, SchemaException;
public String deleteConsistsOfSchema(String consistsOfType) throws SchemaException;
public String getConsistsOfTypes(String consistsOfType, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String registerIsRelatedToSchema(String jsonSchema) throws SchemaException;
public String getIsRelatedToSchema(String isRelatedToType) throws SchemaNotFoundException;
public String getIsRelatedToSchema(String isRelatedToType, boolean includeSubtypes, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
public String updateIsRelatedToSchema(String isRelatedToType, String jsonSchema) throws SchemaNotFoundException, SchemaException;
public String deleteIsRelatedToSchema(String isRelatedToType) throws SchemaException;
public String getIsRelatedToTypes(String isRelatedToType, boolean includeSchema) throws SchemaNotFoundException, SchemaException;
}

View File

@ -22,6 +22,7 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.Schema
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
import org.gcube.informationsystem.types.TypeBinder;
import org.gcube.informationsystem.types.TypeBinder.Property;
import org.gcube.informationsystem.types.TypeBinder.TypeDefinition;
import org.slf4j.Logger;
@ -62,26 +63,34 @@ public class SchemaManagementImpl implements SchemaManagement {
}
public static OClass getTypeSchema(OrientBaseGraph orientBaseGraph,
String type, String baseType) throws SchemaNotFoundException {
String type, String baseType) throws SchemaException {
OMetadata oMetadata = orientBaseGraph.getRawGraph().getMetadata();
OSchema oSchema = oMetadata.getSchema();
return getTypeSchema(oSchema, type, baseType);
}
public static OClass getTypeSchema(OSchema oSchema, String type,
String baseType) throws SchemaException {
try {
OClass oClass = getEntityOClass(orientBaseGraph, type);
if (baseType != null) {
if (baseType.compareTo(Embedded.NAME) != 0
&& !oClass.isSubClassOf(baseType)) {
throw new SchemaException("The requested type is not a "
+ baseType);
OClass oClass = oSchema.getClass(type);
if (oClass == null) {
throw new SchemaNotFoundException(type + "was not registered");
}
if (baseType != null && type.compareTo(baseType) != 0) {
if (!oClass.isSubClassOf(baseType)) {
throw new SchemaException(type + " is not a " + baseType);
}
}
return oClass;
} catch (SchemaNotFoundException snfe) {
throw snfe;
} catch (Exception e) {
throw new SchemaNotFoundException(e.getMessage());
throw new SchemaException(e.getMessage());
}
}
public static OClass getTypeSchema(String type, String baseType)
throws SchemaNotFoundException {
throws SchemaException {
OrientGraphFactory orientGraphFactory = SecurityContextMapper
.getSecurityContextFactory(
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
@ -103,11 +112,32 @@ public class SchemaManagementImpl implements SchemaManagement {
}
}
protected static TypeDefinition getTypeDefinition(OClass oClass)
throws SchemaException {
String json = serializeOClass(oClass);
try {
return TypeBinder.deserializeTypeDefinition(json);
} catch (Exception e) {
throw new SchemaException(e);
}
}
protected static String getTypeDefinitionAsString(OClass oClass)
throws SchemaException {
try {
TypeDefinition typeDefinition = getTypeDefinition(oClass);
return TypeBinder.serializeType(typeDefinition);
} catch (Exception e) {
throw new SchemaException(e);
}
}
protected static JSONObject serializeOClassAsJSON(OClass oClass)
throws SchemaException {
String jsonString = serializeOClass(oClass);
String json = serializeOClass(oClass);
try {
return new JSONObject(jsonString);
return new JSONObject(json);
} catch (JSONException e) {
throw new SchemaException(e);
}
@ -205,14 +235,13 @@ public class SchemaManagementImpl implements SchemaManagement {
typeDefinition.getName());
}
if(typeDefinition.getName().compareTo(Embedded.NAME)!=0){
if (typeDefinition.getName().compareTo(Embedded.NAME) != 0) {
List<OClass> oSuperclasses = getSuperclassesAndCheckCompliancy(
orientGraphNoTx,
typeDefinition,
orientGraphNoTx, typeDefinition,
baseType.getSimpleName());
oClass.setSuperClasses(oSuperclasses);
}
if (Resource.class.isAssignableFrom(baseType)) {
Set<Property> properties = typeDefinition.getProperties();
if (properties != null && properties.size() > 0) {
@ -281,9 +310,9 @@ public class SchemaManagementImpl implements SchemaManagement {
}
}
protected String getListOfType(String type, String baseType,
boolean includeSchema) throws SchemaNotFoundException,
SchemaException {
protected String getSchema(String type, String baseType,
boolean includeSubtypes, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
OrientGraphFactory orientGraphFactory = SecurityContextMapper
.getSecurityContextFactory(
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
@ -292,24 +321,34 @@ public class SchemaManagementImpl implements SchemaManagement {
OrientGraphNoTx orientGraphNoTx = null;
try {
orientGraphNoTx = orientGraphFactory.getNoTx();
JSONArray jsonArray = new JSONArray();
OClass baseOClass = getTypeSchema(orientGraphNoTx, type, baseType);
OMetadata oMetadata = orientGraphNoTx.getRawGraph().getMetadata();
OSchema oSchema = oMetadata.getSchema();
Collection<OClass> oClasses = oSchema.getClasses();
for (OClass oClass : oClasses) {
if (oClass.isSubClassOf(baseOClass)) {
if (includeSchema) {
jsonArray.put(serializeOClassAsJSON(oClass));
} else {
jsonArray.put(oClass.getName());
OClass baseOClass = getTypeSchema(oSchema, type, baseType);
String ret = null;
if (includeSubtypes) {
JSONArray jsonArray = new JSONArray();
Collection<OClass> oClasses = oSchema.getClasses();
for (OClass oClass : oClasses) {
if (oClass.isSubClassOf(baseOClass)) {
if (includeSchema) {
jsonArray.put(getTypeDefinitionAsString(oClass));
} else {
jsonArray.put(oClass.getName());
}
}
}
ret = jsonArray.toString();
} else {
if (includeSchema) {
ret = getTypeDefinitionAsString(baseOClass);
} else {
ret = baseOClass.getName();
}
}
return jsonArray.toString();
return ret;
} catch (SchemaException e) {
throw e;
} catch (Exception e) {
@ -323,15 +362,16 @@ public class SchemaManagementImpl implements SchemaManagement {
}
@Override
public String registerEntitySchema(String jsonSchema)
throws SchemaException {
public String createEntitySchema(String jsonSchema) throws SchemaException {
return registerTypeSchema(jsonSchema, Entity.class);
}
@Override
public String getEntitySchema(String entityType)
throws SchemaNotFoundException {
return getTypeSchemaAsString(entityType, Entity.NAME);
public String readEntitySchema(String entityType, boolean includeSubtypes,
boolean includeSchema) throws SchemaNotFoundException,
SchemaException {
return getSchema(entityType, Entity.NAME, includeSubtypes,
includeSchema);
}
@Override
@ -347,20 +387,15 @@ public class SchemaManagementImpl implements SchemaManagement {
}
@Override
public String getEntityTypes(String baseEntityType, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getListOfType(baseEntityType, Entity.NAME, includeSchema);
}
@Override
public String registerFacetSchema(String jsonSchema) throws SchemaException {
public String createFacetSchema(String jsonSchema) throws SchemaException {
return registerTypeSchema(jsonSchema, Facet.class);
}
@Override
public String getFacetSchema(String facetType)
throws SchemaNotFoundException {
return getTypeSchemaAsString(facetType, Facet.NAME);
public String readFacetSchema(String facetType, boolean includeSubtypes,
boolean includeSchema) throws SchemaNotFoundException,
SchemaException {
return getSchema(facetType, Facet.NAME, includeSubtypes, includeSchema);
}
@Override
@ -375,12 +410,6 @@ public class SchemaManagementImpl implements SchemaManagement {
throw new UnsupportedOperationException("Not Yet implemented");
}
@Override
public String getFacetTypes(String baseFacetType, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getListOfType(baseFacetType, Facet.NAME, includeSchema);
}
@Override
public String registerResourceSchema(String jsonSchema)
throws SchemaException {
@ -388,9 +417,11 @@ public class SchemaManagementImpl implements SchemaManagement {
}
@Override
public String getResourceSchema(String resourceType)
throws SchemaNotFoundException {
return getTypeSchemaAsString(resourceType, Resource.NAME);
public String getResourceSchema(String resourceType,
boolean includeSubtypes, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getSchema(resourceType, Resource.NAME, includeSubtypes,
includeSchema);
}
@Override
@ -405,12 +436,6 @@ public class SchemaManagementImpl implements SchemaManagement {
throw new UnsupportedOperationException("Not Yet implemented");
}
@Override
public String getResourceTypes(String baseResourceType, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getListOfType(baseResourceType, Resource.NAME, includeSchema);
}
@Override
public String registerEmbeddedTypeSchema(String jsonSchema)
throws SchemaException {
@ -418,9 +443,11 @@ public class SchemaManagementImpl implements SchemaManagement {
}
@Override
public String getEmbeddedTypeSchema(String embeddedType)
throws SchemaNotFoundException {
return getTypeSchemaAsString(embeddedType, null);
public String getEmbeddedTypeSchema(String embeddedType,
boolean includeSubtypes, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getSchema(embeddedType, Embedded.NAME, includeSubtypes,
includeSchema);
}
@Override
@ -435,12 +462,6 @@ public class SchemaManagementImpl implements SchemaManagement {
throw new UnsupportedOperationException("Not Yet implemented");
}
@Override
public String getEmbeddedTypes(String embeddedType, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getListOfType(embeddedType, Embedded.NAME, includeSchema);
}
@Override
public String registerRelationSchema(String jsonSchema)
throws SchemaException {
@ -448,9 +469,11 @@ public class SchemaManagementImpl implements SchemaManagement {
}
@Override
public String getRelationSchema(String relationType)
throws SchemaNotFoundException {
return getTypeSchemaAsString(relationType, Relation.NAME);
public String getRelationSchema(String relationType,
boolean includeSubtypes, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getSchema(relationType, Relation.NAME, includeSubtypes,
includeSchema);
}
@Override
@ -465,12 +488,6 @@ public class SchemaManagementImpl implements SchemaManagement {
throw new UnsupportedOperationException("Not Yet implemented");
}
@Override
public String getRelationTypes(String baseRelationType, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getListOfType(baseRelationType, Relation.NAME, includeSchema);
}
@Override
public String registerConsistsOfSchema(String jsonSchema)
throws SchemaException {
@ -478,14 +495,16 @@ public class SchemaManagementImpl implements SchemaManagement {
}
@Override
public String getConsistsOfSchema(String consistsOfType)
throws SchemaNotFoundException {
return getTypeSchemaAsString(consistsOfType, ConsistsOf.NAME);
public String getConsistsOfSchema(String consistsOfType,
boolean includeSubtypes, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getSchema(consistsOfType, ConsistsOf.NAME, includeSubtypes,
includeSchema);
}
@Override
public String updateConsistsOfSchema(String consistsOfType, String jsonSchema)
throws SchemaNotFoundException, SchemaException {
public String updateConsistsOfSchema(String consistsOfType,
String jsonSchema) throws SchemaNotFoundException, SchemaException {
throw new UnsupportedOperationException("Not Yet implemented");
}
@ -495,13 +514,6 @@ public class SchemaManagementImpl implements SchemaManagement {
throw new UnsupportedOperationException("Not Yet implemented");
}
@Override
public String getConsistsOfTypes(String consistsOfType, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getListOfType(consistsOfType, ConsistsOf.NAME, includeSchema);
}
@Override
public String registerIsRelatedToSchema(String jsonSchema)
throws SchemaException {
@ -509,9 +521,11 @@ public class SchemaManagementImpl implements SchemaManagement {
}
@Override
public String getIsRelatedToSchema(String isRelatedToType)
throws SchemaNotFoundException {
return getTypeSchemaAsString(isRelatedToType, IsRelatedTo.NAME);
public String getIsRelatedToSchema(String isRelatedToType,
boolean includeSubtypes, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getSchema(isRelatedToType, IsRelatedTo.NAME, includeSubtypes,
includeSchema);
}
@Override
@ -525,11 +539,5 @@ public class SchemaManagementImpl implements SchemaManagement {
throws SchemaException {
throw new UnsupportedOperationException("Not Yet implemented");
}
@Override
public String getIsRelatedToTypes(String isRelatedToType, boolean includeSchema)
throws SchemaNotFoundException, SchemaException {
return getListOfType(isRelatedToType, IsRelatedTo.NAME, includeSchema);
}
}

View File

@ -72,7 +72,7 @@ public class MultiContextTest extends ScopedTest {
FacetManagement facetManagement = new FacetManagement();
facetManagement.setJSON(Entities.marshal(cpuFacet));
facetManagement.setEntityType(CPUFacet.NAME);
facetManagement.setElementType(CPUFacet.NAME);
String json = facetManagement.create();
logger.debug("Created : {}", json);
@ -187,7 +187,7 @@ public class MultiContextTest extends ScopedTest {
ResourceManagement resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(EService.NAME);
resourceManagement.setElementType(EService.NAME);
resourceManagement.setJSON(Entities.marshal(eService));
String json = resourceManagement.create();
@ -238,7 +238,7 @@ public class MultiContextTest extends ScopedTest {
hostingNode.attachResource(hosts);
resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(HostingNode.NAME);
resourceManagement.setElementType(HostingNode.NAME);
resourceManagement.setJSON(Entities.marshal(hostingNode));
String hnJson = resourceManagement.create();

View File

@ -94,7 +94,7 @@ public class ERManagementTest extends ScopedTest {
eService.addFacet(licenseFacet);
ResourceManagement resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(EService.NAME);
resourceManagement.setElementType(EService.NAME);
resourceManagement.setJSON(Entities.marshal(eService));
String json = resourceManagement.create();
@ -128,7 +128,7 @@ public class ERManagementTest extends ScopedTest {
cpuFacet.setVendor("AMD");
FacetManagement facetManagement = new FacetManagement();
facetManagement.setEntityType(CPUFacet.NAME);
facetManagement.setElementType(CPUFacet.NAME);
facetManagement.setJSON(Entities.marshal(cpuFacet));
String cpuFacetJson = facetManagement.create();
@ -235,7 +235,7 @@ public class ERManagementTest extends ScopedTest {
eService.addFacet(isIdentifiedBy);
ResourceManagement resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(EService.NAME);
resourceManagement.setElementType(EService.NAME);
resourceManagement.setJSON(Entities.marshal(eService));
String json = resourceManagement.create();
@ -253,7 +253,7 @@ public class ERManagementTest extends ScopedTest {
FacetManagement facetManagement = new FacetManagement();
facetManagement.setJSON(Entities.marshal(networkingFacet));
facetManagement.setEntityType(NetworkingFacet.NAME);
facetManagement.setElementType(NetworkingFacet.NAME);
json = facetManagement.create();
logger.debug("Created : {}", json);
@ -282,7 +282,7 @@ public class ERManagementTest extends ScopedTest {
hostingNode.attachResource(hosts);
resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(HostingNode.NAME);
resourceManagement.setElementType(HostingNode.NAME);
resourceManagement.setJSON(Entities.marshal(hostingNode));
json = resourceManagement.create();
@ -321,7 +321,7 @@ public class ERManagementTest extends ScopedTest {
Facet shared = hostingNode.getConsistsOf().get(0).getTarget();
ConsistsOfManagement consistsOfManagement = new ConsistsOfManagement();
consistsOfManagement.setRelationType(ConsistsOf.NAME);
consistsOfManagement.setElementType(ConsistsOf.NAME);
consistsOfManagement.setJSON("{}");
UUID eServiceUUID = eService.getHeader().getUUID();
@ -354,7 +354,7 @@ public class ERManagementTest extends ScopedTest {
@Test
public void testCreateResourceAndFacet() throws Exception {
ResourceManagement resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(HostingNode.NAME);
resourceManagement.setElementType(HostingNode.NAME);
resourceManagement.setJSON("{}");
String json = resourceManagement.create();
@ -367,14 +367,14 @@ public class ERManagementTest extends ScopedTest {
FacetManagement facetManagement = new FacetManagement();
facetManagement.setJSON(Entities.marshal(cpuFacet));
facetManagement.setEntityType(CPUFacet.NAME);
facetManagement.setElementType(CPUFacet.NAME);
json = facetManagement.create();
logger.debug("Created : {}", json);
UUID facetUUID = Utility.getUUIDFromJSONString(json);
ConsistsOfManagement consistsOfManagement = new ConsistsOfManagement();
consistsOfManagement.setRelationType(ConsistsOf.NAME);
consistsOfManagement.setElementType(ConsistsOf.NAME);
consistsOfManagement.setJSON("{}");
json = consistsOfManagement.create(resourceUUID, facetUUID);

View File

@ -85,7 +85,7 @@ public class SmartgearResourcesTest extends ScopedTest {
logger.debug("{}", hostingNode);
ResourceManagement resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(HostingNode.NAME);
resourceManagement.setElementType(HostingNode.NAME);
resourceManagement.setJSON(HOSTING_NODE);
String hnJson = resourceManagement.create();
@ -116,7 +116,7 @@ public class SmartgearResourcesTest extends ScopedTest {
logger.debug("{}", eService);
ResourceManagement resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(EService.NAME);
resourceManagement.setElementType(EService.NAME);
resourceManagement.setJSON(ESERVICE);
String json = resourceManagement.create();
@ -219,7 +219,7 @@ public class SmartgearResourcesTest extends ScopedTest {
hostingNode.addFacet(hasPersistentMemory);
ResourceManagement resourceManagement = new ResourceManagement();
resourceManagement.setEntityType(HostingNode.NAME);
resourceManagement.setElementType(HostingNode.NAME);
resourceManagement.setJSON(Entities.marshal(hostingNode));
String json = resourceManagement.create();

View File

@ -45,7 +45,7 @@ public class SchemaManagementImplTest {
@Test
public void getEmbeddedTypeSchema() throws Exception{
String json = new SchemaManagementImpl().getEmbeddedTypeSchema(AccessPolicy.NAME);
String json = new SchemaManagementImpl().getEmbeddedTypeSchema(AccessPolicy.NAME, false, true);
logger.trace(json);
}
@ -60,10 +60,10 @@ public class SchemaManagementImplTest {
@Test
public void getFacetSchema() throws Exception{
String json = new SchemaManagementImpl().getFacetSchema(ContactFacet.NAME);
logger.trace(json);
String json = new SchemaManagementImpl().readFacetSchema(ContactFacet.NAME, false, true);
logger.info(json);
TypeDefinition typeDefinition = TypeBinder.deserializeTypeDefinition(json);
logger.trace(typeDefinition.toString());
logger.info(typeDefinition.toString());
}
@Test
@ -84,7 +84,7 @@ public class SchemaManagementImplTest {
@Test
public void getResourceSchema() throws Exception{
String json = new SchemaManagementImpl().getResourceSchema(Actor.NAME);
String json = new SchemaManagementImpl().getResourceSchema(Actor.NAME, false, true);
logger.trace(json);
}
@ -102,10 +102,12 @@ public class SchemaManagementImplTest {
public void getList() throws Exception{
logger.debug("\n\n\n");
boolean includeSubTypes = true;
boolean includeSchema = true;
SchemaManagement schemaManagement = new SchemaManagementImpl();
String list = schemaManagement.getEmbeddedTypes(Embedded.NAME, includeSchema);
String list = schemaManagement.getEmbeddedTypeSchema(Embedded.NAME, includeSubTypes, includeSchema);
logger.debug("{} list : {}", Embedded.NAME, list);
ObjectMapper mapper = new ObjectMapper();
@ -114,24 +116,24 @@ public class SchemaManagementImplTest {
list = schemaManagement.getEntityTypes(Entity.NAME, includeSchema);
list = schemaManagement.readEntitySchema(Entity.NAME, includeSubTypes, includeSchema);
logger.debug("{} list : {}", Entity.NAME, list);
list = schemaManagement.getResourceTypes(Resource.NAME, includeSchema);
list = schemaManagement.getResourceSchema(Resource.NAME, includeSubTypes, includeSchema);
logger.debug("{} list : {}", Resource.NAME, list);
list = schemaManagement.getFacetTypes(Facet.NAME, includeSchema);
list = schemaManagement.readFacetSchema(Facet.NAME, includeSubTypes, includeSchema);
logger.debug("{} list : {}", Facet.NAME, list);
list = schemaManagement.getRelationTypes(Relation.NAME, includeSchema);
list = schemaManagement.getRelationSchema(Relation.NAME, includeSubTypes, includeSchema);
logger.debug("{} list : {}", Relation.NAME, list);
list = schemaManagement.getConsistsOfTypes(ConsistsOf.NAME, includeSchema);
list = schemaManagement.getConsistsOfSchema(ConsistsOf.NAME, includeSubTypes, includeSchema);
logger.debug("{} list : {}", ConsistsOf.NAME, list);
list = schemaManagement.getIsRelatedToTypes(IsRelatedTo.NAME, includeSchema);
list = schemaManagement.getIsRelatedToSchema(IsRelatedTo.NAME, includeSubTypes, includeSchema);
logger.debug("{} list : {}", IsRelatedTo.NAME, list);
}