Serializing Resource with facets
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@131456 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
328f8ad8a4
commit
08c6201212
|
@ -6,7 +6,6 @@ package org.gcube.informationsystem.resourceregistry.resources.impl;
|
|||
import java.util.Iterator;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.gcube.informationsystem.model.embedded.Header;
|
||||
import org.gcube.informationsystem.model.orientdb.impl.entity.Context;
|
||||
import org.gcube.informationsystem.model.relation.IsParentOf;
|
||||
|
@ -161,8 +160,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
SecurityContext.addToSecurityContext(orientGraph,
|
||||
context.asVertex(), uuidString);
|
||||
|
||||
String contextJsonString = Utility.vertexToJsonString(context
|
||||
.asVertex());
|
||||
String contextJsonString = Utility.toJsonString(context.asVertex());
|
||||
logger.trace("Creating {}", contextJsonString);
|
||||
|
||||
orientGraph.commit();
|
||||
|
@ -187,12 +185,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
OrientGraph orientGraph = SecurityContextMapper
|
||||
.getSecurityContextFactory(null, PermissionMode.READER).getTx();
|
||||
Vertex context = getContext(orientGraph, contextUUID);
|
||||
try {
|
||||
return Utility.vertexToJsonString(context, false);
|
||||
} catch (JSONException e) {
|
||||
throw new ContextException(e.getCause());
|
||||
}
|
||||
|
||||
return Utility.toJsonString(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -230,7 +223,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
|
||||
orientGraph.commit();
|
||||
|
||||
String contextJsonString = Utility.vertexToJsonString(context);
|
||||
String contextJsonString = Utility.toJsonString(context);
|
||||
logger.info("Context renamed {}", contextJsonString);
|
||||
|
||||
orientGraph.shutdown();
|
||||
|
@ -253,7 +246,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
.getSecurityContextFactory(null, PermissionMode.WRITER).getTx();
|
||||
Vertex context = getContext(orientGraph, contextToMoveUUID);
|
||||
|
||||
logger.trace("Context to move {}", Utility.vertexToJsonString(context));
|
||||
logger.trace("Context to move {}", Utility.toJsonString(context));
|
||||
|
||||
checkContext(orientGraph, newParentUUID,
|
||||
context.getProperty(Context.NAME_PROPERTY).toString());
|
||||
|
@ -270,16 +263,14 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
if (newParentUUID != null) {
|
||||
Vertex parent = getContext(orientGraph, newParentUUID);
|
||||
logger.trace("New Parent Context {}",
|
||||
Utility.vertexToJsonString(parent));
|
||||
Utility.toJsonString(parent));
|
||||
orientGraph.addEdge(null, parent, context, IsParentOf.NAME);
|
||||
}
|
||||
|
||||
|
||||
|
||||
orientGraph.commit();
|
||||
|
||||
context = getContext(orientGraph, contextToMoveUUID);
|
||||
String contextJsonString = Utility.vertexToJsonString(context);
|
||||
String contextJsonString = Utility.toJsonString(context);
|
||||
logger.info("Context moved {}", contextJsonString);
|
||||
|
||||
orientGraph.shutdown();
|
||||
|
@ -297,7 +288,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
.getSecurityContextFactory(null, PermissionMode.WRITER).getTx();
|
||||
Vertex context = getContext(orientGraph, uuid);
|
||||
logger.trace("Context to be delete {}",
|
||||
Utility.vertexToJsonString(context));
|
||||
Utility.toJsonString(context));
|
||||
|
||||
Iterable<Edge> edges = context.getEdges(Direction.OUT, IsParentOf.NAME);
|
||||
if (edges != null && edges.iterator().hasNext()) {
|
||||
|
|
|
@ -13,6 +13,9 @@ import java.util.Map;
|
|||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import org.codehaus.jettison.json.JSONArray;
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
import org.gcube.informationsystem.impl.utils.Entities;
|
||||
import org.gcube.informationsystem.model.embedded.Embedded;
|
||||
import org.gcube.informationsystem.model.embedded.Header;
|
||||
|
@ -40,6 +43,7 @@ import com.fasterxml.jackson.databind.JsonMappingException;
|
|||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.JsonNodeType;
|
||||
import com.tinkerpop.blueprints.Direction;
|
||||
import com.tinkerpop.blueprints.Edge;
|
||||
import com.tinkerpop.blueprints.Vertex;
|
||||
import com.tinkerpop.blueprints.impls.orient.OrientEdge;
|
||||
|
@ -129,49 +133,40 @@ public class EntityManagementImpl implements EntityManagement {
|
|||
return null;
|
||||
}
|
||||
|
||||
private static Entity checkTypeAndGetHeader(JsonNode jsonNode) throws ResourceRegistryException {
|
||||
private static void checkEmbeddedType(JsonNode jsonNode) throws ResourceRegistryException {
|
||||
if(jsonNode.has(Entities.CLASS_PROPERTY)){
|
||||
// Complex type
|
||||
String type = getClassProperty(jsonNode);
|
||||
|
||||
|
||||
SchemaManagementImpl schemaManagement = new SchemaManagementImpl();
|
||||
try {
|
||||
schemaManagement.getTypeSchema(type, Embedded.NAME);
|
||||
|
||||
} catch (SchemaNotFoundException e) {
|
||||
throw e;
|
||||
}
|
||||
boolean validType = false;
|
||||
boolean notEmbedded = false;
|
||||
|
||||
|
||||
|
||||
// Header can be ignored or managed. Actually is managed.
|
||||
if(validType && notEmbedded){
|
||||
org.gcube.informationsystem.model.embedded.Header header = null;
|
||||
Header header = null;
|
||||
try {
|
||||
header = getHeader(jsonNode);
|
||||
} catch (Exception e){
|
||||
logger.warn("An invalid Header has been provided. An embedded object cannot have an Header. It will be ignored.");
|
||||
//throw new ResourceRegistryException("An embedded object cannot have an Header");
|
||||
throw new ResourceRegistryException("An embedded object cannot have an Header");
|
||||
}
|
||||
|
||||
if(header!=null){
|
||||
logger.warn("An embedded object cannot have an Header. It will be ignored.");
|
||||
//throw new ResourceRegistryException("An embedded object cannot have an Header");
|
||||
}
|
||||
}
|
||||
throw new ResourceRegistryException("An embedded object cannot have an Header");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Object getObejctFromElement(JsonNode value) throws ResourceRegistryException {
|
||||
JsonNodeType jsonNodeType = value.getNodeType();
|
||||
switch (jsonNodeType) {
|
||||
case OBJECT:
|
||||
// TODO
|
||||
checkTypeAndGetHeader(value);
|
||||
checkEmbeddedType(value);
|
||||
return null;
|
||||
|
||||
case ARRAY:
|
||||
|
@ -514,8 +509,8 @@ public class EntityManagementImpl implements EntityManagement {
|
|||
|
||||
logger.trace("Creating {} ({}) beetween {} -> {}",
|
||||
Relation.class.getSimpleName(), relationType,
|
||||
Utility.vertexToJsonString(source),
|
||||
Utility.vertexToJsonString(target));
|
||||
Utility.toJsonString(source),
|
||||
Utility.toJsonString(target));
|
||||
|
||||
Edge edge = orientGraph.addEdge(null, source, target, relationType);
|
||||
|
||||
|
@ -610,8 +605,8 @@ public class EntityManagementImpl implements EntityManagement {
|
|||
orientGraph = ContextUtility
|
||||
.getActualSecurityContextGraph(PermissionMode.WRITER);
|
||||
|
||||
// TODO get facetType from json
|
||||
Vertex facet = getEntity(orientGraph, uuid, Facet.NAME, Facet.class);
|
||||
String entityType = getClassProperty(jsonNode);
|
||||
Vertex facet = getEntity(orientGraph, uuid, entityType, Facet.class);
|
||||
|
||||
Set<String> oldKeys = facet.getPropertyKeys();
|
||||
|
||||
|
@ -796,9 +791,24 @@ public class EntityManagementImpl implements EntityManagement {
|
|||
return true;
|
||||
}
|
||||
|
||||
private static String marshallResource(Vertex vertex){
|
||||
// TODO serialize all facets as weel
|
||||
return Utility.orientVertexToJsonString((OrientVertex) vertex, false);
|
||||
private static String marshallResource(Vertex vertex) throws JSONException{
|
||||
JSONObject jsonObject = Utility.toJsonObject(vertex, false);
|
||||
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
|
||||
Iterable<Edge> edges = vertex.getEdges(Direction.OUT, ConsistsOf.NAME);
|
||||
for(Edge edge : edges){
|
||||
JSONObject jsonObjectEdge = Utility.toJsonObject(edge, false);
|
||||
|
||||
Vertex facetVertex = edge.getVertex(Direction.OUT);
|
||||
jsonObjectEdge.put(Relation.TARGET_PROPERTY, Utility.toJsonObject(facetVertex, false));
|
||||
|
||||
jsonArray.put(jsonObjectEdge);
|
||||
}
|
||||
|
||||
jsonObject.append(lowerCaseFirstCharacter(ConsistsOf.NAME), jsonArray);
|
||||
|
||||
return jsonObject.toString();
|
||||
}
|
||||
|
||||
|
||||
|
@ -899,7 +909,6 @@ public class EntityManagementImpl implements EntityManagement {
|
|||
|
||||
// TODO remove attached facets if not managed from hooks
|
||||
|
||||
|
||||
resource.remove();
|
||||
|
||||
orientGraph.commit();
|
||||
|
|
|
@ -119,7 +119,7 @@ public class ContextUtility {
|
|||
Vertex context = iterator.next();
|
||||
|
||||
logger.trace("Context Representing Vertex : {}",
|
||||
Utility.vertexToJsonString(context));
|
||||
Utility.toJsonString(context));
|
||||
|
||||
if (iterator.hasNext()) {
|
||||
throw new ContextNotFoundException(
|
||||
|
|
|
@ -8,6 +8,7 @@ import java.util.Iterator;
|
|||
import java.util.Set;
|
||||
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
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.relation.Relation;
|
||||
|
@ -20,6 +21,7 @@ import org.slf4j.LoggerFactory;
|
|||
import com.orientechnologies.orient.core.record.ORecord;
|
||||
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
|
||||
import com.tinkerpop.blueprints.Edge;
|
||||
import com.tinkerpop.blueprints.Element;
|
||||
import com.tinkerpop.blueprints.Vertex;
|
||||
import com.tinkerpop.blueprints.impls.orient.OrientEdge;
|
||||
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
|
||||
|
@ -35,8 +37,7 @@ public class Utility {
|
|||
|
||||
private static final Logger logger = LoggerFactory.getLogger(Utility.class);
|
||||
|
||||
public static String orientVertexToJsonString(OrientVertex orientVertex,
|
||||
boolean raw) {
|
||||
public static String orientVertexToJsonString(OrientVertex orientVertex, boolean raw) {
|
||||
ORecord oRecord = orientVertex.getRecord();
|
||||
if (raw) {
|
||||
return oRecord.toJSON();
|
||||
|
@ -44,8 +45,7 @@ public class Utility {
|
|||
return oRecord.toJSON("class");
|
||||
}
|
||||
|
||||
public static String orientEdgeToJsonString(OrientEdge orientEdge,
|
||||
boolean raw) {
|
||||
public static String orientEdgeToJsonString(OrientEdge orientEdge, boolean raw) {
|
||||
ORecord oRecord = orientEdge.getRecord();
|
||||
if (raw) {
|
||||
return oRecord.toJSON();
|
||||
|
@ -53,53 +53,29 @@ public class Utility {
|
|||
return oRecord.toJSON("class");
|
||||
}
|
||||
|
||||
public static String vertexToJsonString(Vertex vertex, boolean raw)
|
||||
throws JSONException {
|
||||
public static JSONObject toJsonObject(Element element, boolean raw) throws JSONException {
|
||||
if(raw){
|
||||
return GraphSONUtility.jsonFromElement(vertex,
|
||||
vertex.getPropertyKeys(), GraphSONMode.EXTENDED).toString();
|
||||
return GraphSONUtility.jsonFromElement(element,
|
||||
element.getPropertyKeys(), GraphSONMode.EXTENDED);
|
||||
}else{
|
||||
Set<String> keys = new HashSet<>(vertex.getPropertyKeys());
|
||||
for (String key : vertex.getPropertyKeys()) {
|
||||
Set<String> keys = new HashSet<>(element.getPropertyKeys());
|
||||
for (String key : element.getPropertyKeys()) {
|
||||
if (key.startsWith("_")) {
|
||||
keys.remove(key);
|
||||
}
|
||||
}
|
||||
return GraphSONUtility.jsonFromElement(vertex, keys,
|
||||
GraphSONMode.COMPACT).toString();
|
||||
return GraphSONUtility.jsonFromElement(element, keys,
|
||||
GraphSONMode.COMPACT);
|
||||
}
|
||||
}
|
||||
|
||||
public static String vertexToJsonString(Vertex vertex) {
|
||||
|
||||
|
||||
public static String toJsonString(Element element) {
|
||||
try {
|
||||
return vertexToJsonString(vertex, true);
|
||||
return toJsonObject(element, true).toString();
|
||||
} catch (Exception e) {
|
||||
return String.valueOf(vertex);
|
||||
}
|
||||
}
|
||||
|
||||
public static String edgeToJsonString(Edge edge, boolean raw)
|
||||
throws JSONException {
|
||||
if (raw) {
|
||||
return GraphSONUtility.jsonFromElement(edge,
|
||||
edge.getPropertyKeys(), GraphSONMode.EXTENDED).toString();
|
||||
} else {
|
||||
Set<String> keys = new HashSet<>(edge.getPropertyKeys());
|
||||
for (String key : edge.getPropertyKeys()) {
|
||||
if (key.startsWith("_")) {
|
||||
keys.remove(key);
|
||||
}
|
||||
}
|
||||
return GraphSONUtility.jsonFromElement(edge, keys,
|
||||
GraphSONMode.COMPACT).toString();
|
||||
}
|
||||
}
|
||||
|
||||
public static String edgeToJsonString(Edge edge) {
|
||||
try {
|
||||
return edgeToJsonString(edge, true);
|
||||
} catch (Exception e) {
|
||||
return String.valueOf(edge);
|
||||
return String.valueOf(element);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -130,8 +106,7 @@ public class Utility {
|
|||
Iterator<Vertex> iterator = vertexes.iterator();
|
||||
Vertex entity = iterator.next();
|
||||
|
||||
logger.trace("{} with {} is : {}", entityType, uuid,
|
||||
Utility.vertexToJsonString(entity));
|
||||
logger.trace("{} with {} is : {}", entityType, uuid, Utility.toJsonString(entity));
|
||||
|
||||
if (iterator.hasNext()) {
|
||||
throw new ResourceRegistryException("Found more than one "
|
||||
|
@ -168,7 +143,7 @@ public class Utility {
|
|||
Edge relation = iterator.next();
|
||||
|
||||
logger.trace("{} with {} is : {}", relationType, uuid,
|
||||
Utility.edgeToJsonString(relation));
|
||||
Utility.toJsonString(relation));
|
||||
|
||||
if (iterator.hasNext()) {
|
||||
throw new ResourceRegistryException("Found more than one "
|
||||
|
|
Loading…
Reference in New Issue