Refs #10238: Refactor Context Port Type
Task-Url: https://support.d4science.org/issues/10238 git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@158532 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
3310893d0d
commit
996a00f10f
|
@ -1,29 +1,122 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.informationsystem.resourceregistry.context;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
import org.gcube.informationsystem.model.AccessType;
|
||||
import org.gcube.informationsystem.model.entity.Context;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextCreationException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.er.ERAlreadyPresentException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.er.ERNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.er.entity.EntityManagement;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
*/
|
||||
public interface ContextManagement {
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.tinkerpop.blueprints.Direction;
|
||||
import com.tinkerpop.blueprints.Edge;
|
||||
import com.tinkerpop.blueprints.Vertex;
|
||||
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
|
||||
|
||||
public String create(UUID parentContext, String name) throws ContextCreationException, ResourceRegistryException;
|
||||
public class ContextManagement extends EntityManagement<Context> {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(ContextManagement.class);
|
||||
|
||||
public String read(UUID context) throws ContextNotFoundException, ContextException;
|
||||
public ContextManagement() {
|
||||
super(AccessType.CONTEXT);
|
||||
forceAdmin = true;
|
||||
}
|
||||
|
||||
public String rename(UUID context, String newName) throws ContextNotFoundException, ContextException;
|
||||
public ContextManagement(OrientGraph orientGraph) {
|
||||
super(AccessType.CONTEXT, orientGraph);
|
||||
forceAdmin = true;
|
||||
}
|
||||
|
||||
public String move(UUID newParent, UUID contextToMove) throws ContextNotFoundException, ContextException;
|
||||
|
||||
public boolean delete(UUID context) throws ContextNotFoundException, ContextException;
|
||||
@Override
|
||||
public String serialize() throws ResourceRegistryException {
|
||||
return serializeAsJson().toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject serializeAsJson() throws ResourceRegistryException {
|
||||
|
||||
JSONObject context = serializeSelfOnly();
|
||||
|
||||
int count=0;
|
||||
Iterable<Edge> parents = getElement().getEdges(Direction.IN);
|
||||
for(Edge edge : parents){
|
||||
if(++count>1) {
|
||||
throw new ContextException("A " + Context.NAME + " can not have more than one parent");
|
||||
}
|
||||
ContextManagement contextManagement = new ContextManagement(orientGraph);
|
||||
contextManagement.setElement(edge.getVertex(Direction.OUT));
|
||||
JSONObject parent = contextManagement.serializeSelfOnly();
|
||||
try {
|
||||
IsParentOfManagement isParentOfManagement = new IsParentOfManagement(orientGraph);
|
||||
isParentOfManagement.setElement(edge);
|
||||
JSONObject isParentOf = isParentOfManagement.serializeAsJson(false,false);
|
||||
parent = addRelation(parent, isParentOf, Context.CHILDREN_PROPERTY);
|
||||
|
||||
context.putOpt(Context.PARENT_PROPERTY, parent);
|
||||
} catch (JSONException e) {
|
||||
logger.error("Unable to correctly serialize {}. This is really strange and should not occur.", edge);
|
||||
throw new ContextException("");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Iterable<Edge> childrenEdges = getElement().getEdges(Direction.OUT);
|
||||
for (Edge edge : childrenEdges) {
|
||||
|
||||
IsParentOfManagement isParentOfManagement = new IsParentOfManagement(orientGraph);
|
||||
isParentOfManagement.setElement(edge);
|
||||
try {
|
||||
JSONObject isParentOf = isParentOfManagement.serializeAsJson();
|
||||
context = addRelation(context, isParentOf, Context.CHILDREN_PROPERTY);
|
||||
}catch (ResourceRegistryException e) {
|
||||
logger.error("Unable to correctly serialize {}. This is really strange and should not occur.", edge);
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
logger.error("Unable to correctly serialize {}. This is really strange and should not occur.", edge);
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Vertex reallyCreate() throws ERAlreadyPresentException, ResourceRegistryException {
|
||||
createVertex();
|
||||
|
||||
String propertyName = Context.PARENT_PROPERTY;
|
||||
if (jsonNode.has(propertyName)) {
|
||||
JsonNode parentJsonNode = jsonNode.get(propertyName);
|
||||
ContextManagement contextManagement = new ContextManagement(orientGraph);
|
||||
contextManagement.setJSON(parentJsonNode);
|
||||
Vertex parent = contextManagement.getElement();
|
||||
|
||||
IsParentOfManagement isParentOfManagement = new IsParentOfManagement(orientGraph);
|
||||
isParentOfManagement.reallyCreate(parent, this.element);
|
||||
|
||||
}
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Vertex reallyUpdate() throws ERNotFoundException, ResourceRegistryException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean reallyDelete() throws ERNotFoundException, ResourceRegistryException {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ import com.tinkerpop.blueprints.impls.orient.OrientVertex;
|
|||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
*/
|
||||
public class ContextManagementImpl implements ContextManagement {
|
||||
public class ContextManagementImpl implements OLDContextManagement {
|
||||
|
||||
private static Logger logger = LoggerFactory
|
||||
.getLogger(ContextManagementImpl.class);
|
||||
|
|
|
@ -140,9 +140,14 @@ public class ContextUtility {
|
|||
}
|
||||
|
||||
public static OrientGraph getActualSecurityContextGraph(
|
||||
PermissionMode permissionMode) throws ResourceRegistryException {
|
||||
PermissionMode permissionMode, boolean forceAdmin) throws ResourceRegistryException {
|
||||
try {
|
||||
UUID contextUUID = getActualContextUUID();
|
||||
UUID contextUUID = null;
|
||||
if(forceAdmin) {
|
||||
contextUUID = SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID;
|
||||
}else {
|
||||
contextUUID = getActualContextUUID();
|
||||
}
|
||||
return SecurityContextMapper.getSecurityContextGraph(contextUUID, permissionMode);
|
||||
} catch (ContextException ce) {
|
||||
logger.error("Unable to retrieve context.", ce);
|
||||
|
@ -154,9 +159,14 @@ public class ContextUtility {
|
|||
}
|
||||
|
||||
public static OrientGraphNoTx getActualSecurityContextGraphNoTx(
|
||||
PermissionMode permissionMode) throws ResourceRegistryException {
|
||||
PermissionMode permissionMode, boolean forceAdmin) throws ResourceRegistryException {
|
||||
try {
|
||||
UUID contextUUID = getActualContextUUID();
|
||||
UUID contextUUID = null;
|
||||
if(forceAdmin) {
|
||||
contextUUID = SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID;
|
||||
}else {
|
||||
contextUUID = getActualContextUUID();
|
||||
}
|
||||
return SecurityContextMapper.getSecurityContextGraphNoTx(contextUUID, permissionMode);
|
||||
} catch (ContextException ce) {
|
||||
logger.error("Unable to retrieve context.", ce);
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.informationsystem.resourceregistry.context;
|
||||
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
import org.gcube.informationsystem.model.AccessType;
|
||||
import org.gcube.informationsystem.model.relation.IsParentOf;
|
||||
import org.gcube.informationsystem.model.relation.Relation;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||
import org.gcube.informationsystem.resourceregistry.er.relation.RelationManagement;
|
||||
|
||||
import com.tinkerpop.blueprints.Direction;
|
||||
import com.tinkerpop.blueprints.Edge;
|
||||
import com.tinkerpop.blueprints.Vertex;
|
||||
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class IsParentOfManagement extends RelationManagement<IsParentOf> {
|
||||
|
||||
public IsParentOfManagement() {
|
||||
super(AccessType.IS_PARENT_OF);
|
||||
}
|
||||
|
||||
public IsParentOfManagement(OrientGraph orientGraph) {
|
||||
super(AccessType.IS_PARENT_OF, orientGraph);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject serializeAsJson() throws ResourceRegistryException {
|
||||
return serializeAsJson(false, true);
|
||||
}
|
||||
|
||||
public JSONObject serializeAsJson(boolean includeSource, boolean includeTarget) throws ResourceRegistryException {
|
||||
JSONObject relation = serializeSelfOnly();
|
||||
|
||||
try {
|
||||
Vertex source = element.getVertex(Direction.OUT);
|
||||
ContextManagement sourceContextManagement = new ContextManagement(orientGraph);
|
||||
sourceContextManagement.setElement(source);
|
||||
if(includeSource) {
|
||||
relation.put(Relation.SOURCE_PROPERTY, sourceContextManagement.serializeSelfOnly());
|
||||
}
|
||||
|
||||
Vertex target = element.getVertex(Direction.IN);
|
||||
ContextManagement targetContextManagement = new ContextManagement(orientGraph);
|
||||
targetContextManagement.setElement(target);
|
||||
if(includeTarget) {
|
||||
relation.put(Relation.TARGET_PROPERTY, targetContextManagement.serializeSelfOnly());
|
||||
}
|
||||
|
||||
} catch (ResourceRegistryException e) {
|
||||
logger.error("Unable to correctly serialize {}. This is really strange and should not occur.", element, e);
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
logger.error("Unable to correctly serialize {}. This is really strange and should not occur.", element, e);
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
|
||||
return relation;
|
||||
}
|
||||
|
||||
public Edge reallyCreate(Vertex source, Vertex target) throws ResourceRegistryException {
|
||||
return super.reallyCreate(source, target);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.informationsystem.resourceregistry.context;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextCreationException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
*/
|
||||
public interface OLDContextManagement {
|
||||
|
||||
public String create(UUID parentContext, String name) throws ContextCreationException, ResourceRegistryException;
|
||||
|
||||
public String read(UUID context) throws ContextNotFoundException, ContextException;
|
||||
|
||||
public String rename(UUID context, String newName) throws ContextNotFoundException, ContextException;
|
||||
|
||||
public String move(UUID newParent, UUID contextToMove) throws ContextNotFoundException, ContextException;
|
||||
|
||||
public boolean delete(UUID context) throws ContextNotFoundException, ContextException;
|
||||
|
||||
|
||||
}
|
|
@ -27,8 +27,8 @@ public abstract class SecurityContextMapper {
|
|||
.getLogger(SecurityContextMapper.class);
|
||||
|
||||
// Used to persist Schemas
|
||||
public static final String ADMIN_SECURITY_CONTEXT = "00000000-0000-0000-0000-000000000000";
|
||||
public static final UUID ADMIN_SECURITY_CONTEXT_UUID = UUID.fromString(ADMIN_SECURITY_CONTEXT);
|
||||
protected static final String ADMIN_SECURITY_CONTEXT = "00000000-0000-0000-0000-000000000000";
|
||||
protected static final UUID ADMIN_SECURITY_CONTEXT_UUID = UUID.fromString(ADMIN_SECURITY_CONTEXT);
|
||||
|
||||
// Used to Persist Context and thei relations
|
||||
public static final String MANAGEMENT_SECURITY_CONTEXT = "ffffffff-ffff-ffff-ffff-ffffffffffff";
|
||||
|
@ -147,7 +147,7 @@ public abstract class SecurityContextMapper {
|
|||
return factory;
|
||||
}
|
||||
|
||||
public static OrientGraph getSecurityContextGraph(
|
||||
protected static OrientGraph getSecurityContextGraph(
|
||||
UUID context, PermissionMode permissionMode) {
|
||||
OrientGraphFactory factory = getSecurityContextFactory(context, permissionMode, false);
|
||||
OrientGraph orientGraph = factory.getTx();
|
||||
|
@ -158,7 +158,7 @@ public abstract class SecurityContextMapper {
|
|||
return orientGraph;
|
||||
}
|
||||
|
||||
public static OrientGraphNoTx getSecurityContextGraphNoTx(
|
||||
protected static OrientGraphNoTx getSecurityContextGraphNoTx(
|
||||
UUID context, PermissionMode permissionMode) {
|
||||
OrientGraphFactory factory = getSecurityContextFactory(context, permissionMode, false);
|
||||
OrientGraphNoTx orientGraphNoTx = factory.getNoTx();
|
||||
|
|
|
@ -46,7 +46,6 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.relation.Rela
|
|||
import org.gcube.informationsystem.resourceregistry.api.exceptions.relation.RelationNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
||||
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.dbinitialization.DatabaseIntializator;
|
||||
import org.gcube.informationsystem.resourceregistry.er.entity.EntityManagement;
|
||||
|
@ -86,7 +85,9 @@ import com.tinkerpop.blueprints.util.StringFactory;
|
|||
*/
|
||||
public abstract class ERManagement<ERType extends ER, El extends Element> {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(ERManagement.class);
|
||||
protected Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
private static Logger staticLogger = LoggerFactory.getLogger(ERManagement.class);
|
||||
|
||||
public final String AT = "@";
|
||||
public final String UNDERSCORE = "_";
|
||||
|
@ -105,6 +106,19 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
protected String erType;
|
||||
|
||||
protected El element;
|
||||
|
||||
/**
|
||||
* Yhis boolean is used to force the use of ADMIN user instead of the user of the context
|
||||
*/
|
||||
protected boolean forceAdmin;
|
||||
|
||||
public boolean isForceAdmin() {
|
||||
return forceAdmin;
|
||||
}
|
||||
|
||||
public void setForceAdmin(boolean forceAdmin) {
|
||||
this.forceAdmin = forceAdmin;
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static ERManagement getERManagement(AccessType querableType)
|
||||
|
@ -235,7 +249,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
checkJSON();
|
||||
}
|
||||
|
||||
protected OClass getOClass() throws SchemaException {
|
||||
protected OClass getOClass() throws SchemaException, ResourceRegistryException {
|
||||
if(oClass==null){
|
||||
if(element!=null){
|
||||
OrientElement orientElement = (OrientElement) element;
|
||||
|
@ -325,7 +339,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
|
||||
public abstract JSONObject serializeAsJson()
|
||||
throws ResourceRegistryException;
|
||||
|
||||
|
||||
protected abstract El reallyCreate() throws ERAlreadyPresentException,
|
||||
ResourceRegistryException;
|
||||
|
||||
|
@ -527,7 +541,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
public String all(boolean polymorphic) throws ResourceRegistryException {
|
||||
try {
|
||||
orientGraph = ContextUtility
|
||||
.getActualSecurityContextGraph(PermissionMode.READER);
|
||||
.getActualSecurityContextGraph(PermissionMode.READER, forceAdmin);
|
||||
|
||||
return reallyGetAll(polymorphic);
|
||||
} catch (ResourceRegistryException e) {
|
||||
|
@ -544,7 +558,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
public boolean exists() throws ERNotFoundException,
|
||||
ERAvailableInAnotherContextException, ResourceRegistryException {
|
||||
try {
|
||||
orientGraph = ContextUtility.getActualSecurityContextGraph(PermissionMode.READER);
|
||||
orientGraph = ContextUtility.getActualSecurityContextGraph(PermissionMode.READER, forceAdmin);
|
||||
|
||||
getElement();
|
||||
|
||||
|
@ -563,7 +577,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
public String create() throws ERAlreadyPresentException, ResourceRegistryException {
|
||||
|
||||
try {
|
||||
orientGraph = ContextUtility.getActualSecurityContextGraph(PermissionMode.WRITER);
|
||||
orientGraph = ContextUtility.getActualSecurityContextGraph(PermissionMode.WRITER, forceAdmin);
|
||||
|
||||
element = internalCreate();
|
||||
|
||||
|
@ -594,7 +608,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
ERAvailableInAnotherContextException, ResourceRegistryException {
|
||||
try {
|
||||
orientGraph = ContextUtility
|
||||
.getActualSecurityContextGraph(PermissionMode.READER);
|
||||
.getActualSecurityContextGraph(PermissionMode.READER, forceAdmin);
|
||||
|
||||
getElement();
|
||||
|
||||
|
@ -614,7 +628,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
ERAvailableInAnotherContextException, ResourceRegistryException {
|
||||
try {
|
||||
orientGraph = ContextUtility
|
||||
.getActualSecurityContextGraph(PermissionMode.WRITER);
|
||||
.getActualSecurityContextGraph(PermissionMode.WRITER, forceAdmin);
|
||||
element = internalUpdate();
|
||||
|
||||
orientGraph.commit();
|
||||
|
@ -646,9 +660,8 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
|
||||
try {
|
||||
|
||||
orientGraph = SecurityContextMapper.getSecurityContextGraph(
|
||||
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
|
||||
PermissionMode.WRITER);
|
||||
orientGraph = ContextUtility.getActualSecurityContextGraph(
|
||||
PermissionMode.WRITER, true);
|
||||
|
||||
boolean deleted = reallyDelete();
|
||||
|
||||
|
@ -688,9 +701,8 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
accessType.getName(), uuid);
|
||||
|
||||
try {
|
||||
orientGraph = SecurityContextMapper.getSecurityContextGraph(
|
||||
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
|
||||
PermissionMode.WRITER);
|
||||
orientGraph = ContextUtility.getActualSecurityContextGraph(
|
||||
PermissionMode.WRITER, true);
|
||||
|
||||
boolean added = internalAddToContext();
|
||||
|
||||
|
@ -718,9 +730,8 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
accessType.getName(), uuid);
|
||||
|
||||
try {
|
||||
orientGraph = SecurityContextMapper.getSecurityContextGraph(
|
||||
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
|
||||
PermissionMode.WRITER);
|
||||
orientGraph = ContextUtility.getActualSecurityContextGraph(
|
||||
PermissionMode.WRITER, true);
|
||||
|
||||
boolean removed = internalRemoveFromContext();
|
||||
|
||||
|
@ -852,7 +863,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
map.put(key, object);
|
||||
}
|
||||
} catch (ResourceRegistryException e) {
|
||||
logger.warn("An invalidy property has been provided. It will be ignored.");
|
||||
staticLogger.warn("An invalidy property has been provided. It will be ignored.");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -920,7 +931,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
String error = String.format(
|
||||
"Error while setting property %s : %s (%s)", key, properties
|
||||
.get(key).toString(), e.getMessage());
|
||||
logger.error(error);
|
||||
staticLogger.error(error);
|
||||
throw new ResourceRegistryException(error, e);
|
||||
}
|
||||
}
|
||||
|
@ -1010,7 +1021,7 @@ public abstract class ERManagement<ERType extends ER, El extends Element> {
|
|||
}
|
||||
}
|
||||
|
||||
protected Collection<String> getSuperclasses() throws SchemaException{
|
||||
protected Collection<String> getSuperclasses() throws SchemaException, ResourceRegistryException {
|
||||
Collection<OClass> allSuperClasses = getOClass().getAllSuperClasses();
|
||||
Collection<String> superClasses = new HashSet<>();
|
||||
for(OClass oSuperClass : allSuperClasses){
|
||||
|
|
|
@ -36,7 +36,7 @@ import com.tinkerpop.blueprints.impls.orient.OrientVertexType;
|
|||
public abstract class EntityManagement<E extends Entity> extends
|
||||
ERManagement<E, Vertex> {
|
||||
|
||||
private static Logger logger = LoggerFactory
|
||||
private static Logger staticLogger = LoggerFactory
|
||||
.getLogger(EntityManagement.class);
|
||||
|
||||
protected EntityManagement(AccessType accessType) {
|
||||
|
@ -60,6 +60,25 @@ public abstract class EntityManagement<E extends Entity> extends
|
|||
this.orientGraph = orientGraph;
|
||||
}
|
||||
|
||||
protected static JSONObject addRelation(JSONObject sourceResource,
|
||||
JSONObject relation, String arrayKey)
|
||||
throws ResourceRegistryException {
|
||||
JSONArray relationArray = null;
|
||||
try {
|
||||
if (sourceResource.has(arrayKey)) {
|
||||
relationArray = sourceResource.getJSONArray(arrayKey);
|
||||
} else {
|
||||
relationArray = new JSONArray();
|
||||
}
|
||||
|
||||
relationArray.put(relation);
|
||||
sourceResource.putOpt(arrayKey, relationArray);
|
||||
} catch (Exception e) {
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
return sourceResource;
|
||||
}
|
||||
|
||||
protected Vertex createVertex() throws EntityAlreadyPresentException,
|
||||
ResourceRegistryException {
|
||||
|
||||
|
@ -190,7 +209,7 @@ public abstract class EntityManagement<E extends Entity> extends
|
|||
orientVertexType = ((OrientVertex) vertex).getType();
|
||||
}catch (Exception e) {
|
||||
String error = String.format("Unable to detect type of %s. This is really strage please contact the administrator.", vertex.toString());
|
||||
logger.error(error, e);
|
||||
staticLogger.error(error, e);
|
||||
throw new ResourceRegistryException(error);
|
||||
}
|
||||
|
||||
|
|
|
@ -22,8 +22,6 @@ import org.gcube.informationsystem.resourceregistry.er.relation.ConsistsOfManage
|
|||
import org.gcube.informationsystem.resourceregistry.er.relation.IsRelatedToManagement;
|
||||
import org.gcube.informationsystem.resourceregistry.er.relation.RelationManagement;
|
||||
import org.gcube.informationsystem.resourceregistry.utils.Utility;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
|
||||
|
@ -43,9 +41,6 @@ import com.tinkerpop.blueprints.impls.orient.OrientVertexType;
|
|||
*/
|
||||
public class ResourceManagement extends EntityManagement<Resource> {
|
||||
|
||||
private static Logger logger = LoggerFactory
|
||||
.getLogger(ResourceManagement.class);
|
||||
|
||||
public ResourceManagement() {
|
||||
super(AccessType.RESOURCE);
|
||||
}
|
||||
|
@ -105,36 +100,14 @@ public class ResourceManagement extends EntityManagement<Resource> {
|
|||
return sourceResource;
|
||||
}
|
||||
|
||||
protected static JSONObject addRelation(JSONObject sourceResource,
|
||||
JSONObject relation, AccessType accessType)
|
||||
throws ResourceRegistryException {
|
||||
String arrayKey = accessType.lowerCaseFirstCharacter();
|
||||
JSONArray relationArray = null;
|
||||
|
||||
try {
|
||||
if (sourceResource.has(arrayKey)) {
|
||||
relationArray = sourceResource.getJSONArray(arrayKey);
|
||||
} else {
|
||||
relationArray = new JSONArray();
|
||||
}
|
||||
|
||||
relationArray.put(relation);
|
||||
sourceResource.putOpt(arrayKey, relationArray);
|
||||
} catch (Exception e) {
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
|
||||
return sourceResource;
|
||||
}
|
||||
|
||||
public static JSONObject addConsistsOf(JSONObject sourceResource,
|
||||
JSONObject consistsOf) throws ResourceRegistryException {
|
||||
return addRelation(sourceResource, consistsOf, AccessType.CONSISTS_OF);
|
||||
return addRelation(sourceResource, consistsOf, AccessType.CONSISTS_OF.lowerCaseFirstCharacter());
|
||||
}
|
||||
|
||||
public static JSONObject addIsRelatedTo(JSONObject sourceResource,
|
||||
JSONObject isRelatedTo) throws ResourceRegistryException {
|
||||
return addRelation(sourceResource, isRelatedTo, AccessType.IS_RELATED_TO);
|
||||
return addRelation(sourceResource, isRelatedTo, AccessType.IS_RELATED_TO.lowerCaseFirstCharacter());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -238,7 +211,7 @@ public class ResourceManagement extends EntityManagement<Resource> {
|
|||
public String all(boolean polymorphic, Map<String, String> constraint) throws ResourceRegistryException {
|
||||
try {
|
||||
orientGraph = ContextUtility
|
||||
.getActualSecurityContextGraph(PermissionMode.READER);
|
||||
.getActualSecurityContextGraph(PermissionMode.READER, forceAdmin);
|
||||
|
||||
return reallyGetAll(polymorphic, constraint);
|
||||
} catch (ResourceRegistryException e) {
|
||||
|
|
|
@ -27,15 +27,12 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegis
|
|||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.relation.RelationNotFoundException;
|
||||
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.utils.Utility;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.tinkerpop.blueprints.Direction;
|
||||
|
@ -54,9 +51,6 @@ import com.tinkerpop.blueprints.impls.orient.OrientGraph;
|
|||
public abstract class RelationManagement<R extends Relation> extends
|
||||
ERManagement<R, Edge> {
|
||||
|
||||
private static Logger logger = LoggerFactory
|
||||
.getLogger(RelationManagement.class);
|
||||
|
||||
protected final Class<? extends Entity> targetEntityClass;
|
||||
|
||||
protected RelationManagement(AccessType accessType) {
|
||||
|
@ -622,7 +616,7 @@ public abstract class RelationManagement<R extends Relation> extends
|
|||
throws ResourceRegistryException {
|
||||
try {
|
||||
orientGraph = ContextUtility
|
||||
.getActualSecurityContextGraph(PermissionMode.WRITER);
|
||||
.getActualSecurityContextGraph(PermissionMode.WRITER, forceAdmin);
|
||||
|
||||
element = reallyCreate(sourceUUID, targetUUID);
|
||||
|
||||
|
@ -704,7 +698,7 @@ public abstract class RelationManagement<R extends Relation> extends
|
|||
throws ResourceRegistryException {
|
||||
try {
|
||||
orientGraph = ContextUtility
|
||||
.getActualSecurityContextGraph(PermissionMode.READER);
|
||||
.getActualSecurityContextGraph(PermissionMode.READER, forceAdmin);
|
||||
|
||||
return reallyGetAllFrom(uuid, direction, polymorphic);
|
||||
} catch (ResourceRegistryException e) {
|
||||
|
@ -724,9 +718,8 @@ public abstract class RelationManagement<R extends Relation> extends
|
|||
accessType.getName(), uuid);
|
||||
|
||||
try {
|
||||
orientGraph = SecurityContextMapper.getSecurityContextGraph(
|
||||
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
|
||||
PermissionMode.WRITER);
|
||||
orientGraph = ContextUtility.getActualSecurityContextGraph(
|
||||
PermissionMode.WRITER, true);
|
||||
|
||||
boolean added = forcedAddToContext();
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.query.Invalid
|
|||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.rest.AccessPath;
|
||||
import org.gcube.informationsystem.resourceregistry.api.rest.httputils.HTTPCall.HTTPMETHOD;
|
||||
import org.gcube.informationsystem.resourceregistry.context.ContextManagement;
|
||||
import org.gcube.informationsystem.resourceregistry.context.OLDContextManagement;
|
||||
import org.gcube.informationsystem.resourceregistry.context.ContextManagementImpl;
|
||||
import org.gcube.informationsystem.resourceregistry.er.ERManagement;
|
||||
import org.gcube.informationsystem.resourceregistry.er.entity.EntityManagement;
|
||||
|
@ -298,7 +298,7 @@ public class Access {
|
|||
public String getContext(@PathParam(ID_PATH_PARAM) String uuid)
|
||||
throws ContextNotFoundException, ContextException {
|
||||
logger.info("Requested to read {} with id {} ", org.gcube.informationsystem.model.entity.Context.NAME, uuid);
|
||||
ContextManagement contextManager = new ContextManagementImpl();
|
||||
OLDContextManagement contextManager = new ContextManagementImpl();
|
||||
return contextManager.read(UUID.fromString(uuid));
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.context.Conte
|
|||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.rest.ContextPath;
|
||||
import org.gcube.informationsystem.resourceregistry.context.ContextManagement;
|
||||
import org.gcube.informationsystem.resourceregistry.context.OLDContextManagement;
|
||||
import org.gcube.informationsystem.resourceregistry.context.ContextManagementImpl;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -43,7 +43,7 @@ public class ContextManager {
|
|||
|
||||
public static final String ID_PATH_PARAM = "id";
|
||||
|
||||
protected ContextManagement contextManager = new ContextManagementImpl();
|
||||
protected OLDContextManagement contextManager = new ContextManagementImpl();
|
||||
|
||||
/**
|
||||
* e.g. PUT /resource-registry/context?name=myVRE&parentContextId=a2fe0030-7b3d-4617-ba37-532c0e4b778d
|
||||
|
|
|
@ -8,7 +8,7 @@ import org.gcube.informationsystem.model.entity.Entity;
|
|||
import org.gcube.informationsystem.model.relation.Relation;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
|
||||
import org.gcube.informationsystem.resourceregistry.context.ContextUtility;
|
||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
|
||||
import org.gcube.informationsystem.types.TypeBinder.TypeDefinition;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -55,8 +55,7 @@ public class SchemaContextManagement implements SchemaManagement {
|
|||
OrientGraph orientGraph = null;
|
||||
|
||||
try {
|
||||
orientGraph = SecurityContextMapper
|
||||
.getSecurityContextGraph(SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID, PermissionMode.WRITER);
|
||||
orientGraph = ContextUtility.getActualSecurityContextGraph(PermissionMode.WRITER, true);
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
TypeDefinition typeDefinition = mapper.readValue(json, TypeDefinition.class);
|
||||
|
|
|
@ -19,7 +19,7 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegis
|
|||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaAlreadyPresentException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
|
||||
import org.gcube.informationsystem.resourceregistry.context.ContextUtility;
|
||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
|
||||
import org.gcube.informationsystem.types.TypeBinder;
|
||||
import org.gcube.informationsystem.types.TypeBinder.Property;
|
||||
|
@ -86,18 +86,18 @@ public class SchemaManagementImpl implements SchemaManagement {
|
|||
}
|
||||
|
||||
public static OClass getTypeSchema(String type, AccessType accessType)
|
||||
throws SchemaException {
|
||||
throws SchemaException, ResourceRegistryException {
|
||||
OrientGraphNoTx orientGraphNoTx = null;
|
||||
try {
|
||||
logger.debug("Getting {} Type {} schema",
|
||||
accessType != null ? accessType.getName() : "", type);
|
||||
|
||||
orientGraphNoTx = SecurityContextMapper.getSecurityContextGraphNoTx(
|
||||
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
|
||||
PermissionMode.READER);
|
||||
orientGraphNoTx = ContextUtility.getActualSecurityContextGraphNoTx(
|
||||
PermissionMode.READER, true);
|
||||
|
||||
return getTypeSchema(orientGraphNoTx, type, accessType);
|
||||
|
||||
} catch (ResourceRegistryException e) {
|
||||
throw e;
|
||||
} finally {
|
||||
if (orientGraphNoTx != null) {
|
||||
orientGraphNoTx.shutdown();
|
||||
|
@ -178,9 +178,8 @@ public class SchemaManagementImpl implements SchemaManagement {
|
|||
TypeDefinition typeDefinition = mapper.readValue(jsonSchema,
|
||||
TypeDefinition.class);
|
||||
|
||||
orientGraphNoTx = SecurityContextMapper.getSecurityContextGraphNoTx(
|
||||
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
|
||||
PermissionMode.WRITER);
|
||||
orientGraphNoTx = ContextUtility.getActualSecurityContextGraphNoTx(
|
||||
PermissionMode.WRITER, true);
|
||||
OMetadata oMetadata = orientGraphNoTx.getRawGraph().getMetadata();
|
||||
OSchema oSchema = oMetadata.getSchema();
|
||||
|
||||
|
@ -337,9 +336,8 @@ public class SchemaManagementImpl implements SchemaManagement {
|
|||
throws SchemaNotFoundException, SchemaException {
|
||||
OrientGraphNoTx orientGraphNoTx = null;
|
||||
try {
|
||||
orientGraphNoTx = SecurityContextMapper.getSecurityContextGraphNoTx(
|
||||
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID,
|
||||
PermissionMode.WRITER);
|
||||
orientGraphNoTx = ContextUtility.getActualSecurityContextGraphNoTx(
|
||||
PermissionMode.WRITER, true);
|
||||
|
||||
OMetadata oMetadata = orientGraphNoTx.getRawGraph().getMetadata();
|
||||
OSchema oSchema = oMetadata.getSchema();
|
||||
|
|
|
@ -17,7 +17,7 @@ import org.gcube.informationsystem.model.entity.Entity;
|
|||
import org.gcube.informationsystem.model.relation.Relation;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.er.ERNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
|
||||
import org.gcube.informationsystem.resourceregistry.context.ContextUtility;
|
||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -92,8 +92,7 @@ public class Utility {
|
|||
Class<? extends El> clz) throws ERNotFoundException, ResourceRegistryException {
|
||||
OrientGraphNoTx orientGraphNoTx = null;
|
||||
try {
|
||||
orientGraphNoTx = SecurityContextMapper.getSecurityContextGraphNoTx(
|
||||
SecurityContextMapper.ADMIN_SECURITY_CONTEXT_UUID, PermissionMode.READER);
|
||||
orientGraphNoTx = ContextUtility.getActualSecurityContextGraphNoTx(PermissionMode.READER, true);
|
||||
return Utility.getElementByUUID(orientGraphNoTx, elementType, uuid, clz);
|
||||
} finally {
|
||||
if (orientGraphNoTx != null) {
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
package org.gcube.informationsystem.resourceregistry.context;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.gcube.informationsystem.impl.entity.ContextImpl;
|
||||
import org.gcube.informationsystem.impl.utils.ISMapper;
|
||||
import org.gcube.informationsystem.model.entity.Context;
|
||||
import org.gcube.informationsystem.model.relation.IsParentOf;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class ContextManagementTest {
|
||||
|
||||
private static Logger logger = LoggerFactory
|
||||
.getLogger(ContextManagementTest.class);
|
||||
|
||||
@Test
|
||||
public void get() throws Exception {
|
||||
// UUID uuid = UUID.fromString("34395f1c-ecb3-4d21-8abe-986ba1650919");
|
||||
UUID uuid = UUID.fromString("9e5ed12d-54e9-4810-9133-cfbcad996981");
|
||||
|
||||
ContextManagement contextManagement = new ContextManagement();
|
||||
contextManagement.setUUID(uuid);
|
||||
|
||||
String string = contextManagement.read();
|
||||
logger.debug(string);
|
||||
|
||||
Context context = ISMapper.unmarshal(Context.class, string);
|
||||
|
||||
logger.debug("{}", ISMapper.marshal(context));
|
||||
|
||||
logger.debug("Parent : {}", ISMapper.marshal(context.getParent()));
|
||||
|
||||
for(IsParentOf<Context, Context> isParentOf : context.getChildren()){
|
||||
logger.debug("Children : {}", ISMapper.marshal(isParentOf));
|
||||
}
|
||||
|
||||
|
||||
Context parent = context.getParent(); //.getSource();
|
||||
Context sameOfContext = parent.getChildren().get(0).getTarget();
|
||||
Assert.assertTrue(context==sameOfContext);
|
||||
|
||||
|
||||
List<IsParentOf<Context, Context>> children = context.getChildren();
|
||||
for(IsParentOf<Context, Context> child : children) {
|
||||
Assert.assertTrue(child.getSource()==context);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testJava() throws Exception {
|
||||
Context gcube = new ContextImpl("gcube");
|
||||
logger.debug("gcube : {}", ISMapper.marshal(gcube));
|
||||
|
||||
Context devsec = new ContextImpl("devsec");
|
||||
gcube.addChild(devsec);
|
||||
logger.debug("devsec : {}", ISMapper.marshal(devsec));
|
||||
|
||||
Context devVRE = new ContextImpl("devVRE");
|
||||
devsec.addChild(devVRE);
|
||||
logger.debug("devVRE : {}", ISMapper.marshal(devVRE));
|
||||
|
||||
Context devNext = new ContextImpl("devNext");
|
||||
gcube.addChild(devNext);
|
||||
logger.debug("devNext : {}", ISMapper.marshal(devNext));
|
||||
|
||||
Context NextNext = new ContextImpl("NextNext");
|
||||
devNext.addChild(NextNext);
|
||||
logger.debug("NextNext : {}", ISMapper.marshal(NextNext));
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue