From 0ebbef1c55cd458a42c25211c8846f837c937286 Mon Sep 17 00:00:00 2001 From: "luca.frosini" Date: Mon, 27 Mar 2017 13:04:44 +0000 Subject: [PATCH] Added embedded management for unknown property git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@146361 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../resourceregistry/er/ERManagement.java | 28 ++++++++++++------- .../er/EmbeddedMangement.java | 4 ++- .../er/entity/EntityManagement.java | 2 +- .../er/entity/FacetManagement.java | 2 +- .../er/relation/RelationManagement.java | 4 +-- .../context/ContextManagementImplTest.java | 17 +++++------ 6 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java index 68a32fd..adfb5a8 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java @@ -35,7 +35,7 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet. import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException; import org.gcube.informationsystem.resourceregistry.api.exceptions.er.ERNotFoundException; import org.gcube.informationsystem.resourceregistry.api.exceptions.relation.RelationNotFoundException; -import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException; +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; @@ -85,6 +85,7 @@ public abstract class ERManagement { protected final Set ignoreKeys; protected final Set ignoreStartWithKeys; + protected OClass oClass; protected Class erTypeClass; protected String baseType; @@ -223,6 +224,10 @@ public abstract class ERManagement { checkJSON(); } + protected void getSchema() throws SchemaException { + oClass = SchemaManagementImpl.getTypeSchema(erType, baseType); + } + public void setElementType(String erType) throws ResourceRegistryException { this.erType = erType; if (erType == null || erType.compareTo("") == 0) { @@ -261,6 +266,7 @@ public abstract class ERManagement { if (this.erType == null) { this.erType = getClassProperty(jsonNode); + getSchema(); } else { checkERMatch(); } @@ -277,12 +283,7 @@ public abstract class ERManagement { throw new ResourceRegistryException(error); } } - - try { - SchemaManagementImpl.getTypeSchema(erType, baseType); - } catch (SchemaNotFoundException e) { - throw e; - } + getSchema(); } protected void checkUUIDMatch() throws ResourceRegistryException { @@ -309,7 +310,6 @@ public abstract class ERManagement { public JSONObject serializeSelfOnly() throws ResourceRegistryException { try { return toJSONObject(); - //return Utility.toJsonObject((OrientElement) getElement(), false); }catch(Exception e){ throw new ResourceRegistryException(e); } @@ -648,7 +648,7 @@ public abstract class ERManagement { return map; } - public static Element updateProperties(Element element, JsonNode jsonNode, + public static Element updateProperties(OClass oClass, Element element, JsonNode jsonNode, Set ignoreKeys, Set ignoreStartWithKeys) throws ResourceRegistryException { @@ -672,7 +672,15 @@ public abstract class ERManagement { for (String key : properties.keySet()) { try { - element.setProperty(key, properties.get(key)); + + Object object = properties.get(key); + if(!oClass.existsProperty(key) && object instanceof ODocument){ + ODocument oDocument = (ODocument) object; + ((OrientElement) element).setProperty(key, oDocument, OType.EMBEDDED); + } else{ + element.setProperty(key, object); + } + } catch (Exception e) { String error = String.format( "Error while setting property %s : %s", key, properties diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/EmbeddedMangement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/EmbeddedMangement.java index 04c2a88..1646265 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/EmbeddedMangement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/EmbeddedMangement.java @@ -72,6 +72,8 @@ public class EmbeddedMangement { return oDocument.fromJSON(jsonNode.toString()); } - return null; + + ODocument oDocument = new ODocument(); + return oDocument.fromJSON(jsonNode.toString()); } } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/EntityManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/EntityManagement.java index bd32ee6..bc21398 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/EntityManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/EntityManagement.java @@ -103,7 +103,7 @@ public abstract class EntityManagement extends if (Resource.class.isAssignableFrom(erTypeClass)) { // Facet and relation are created in calling method } else { - ERManagement.updateProperties(element, jsonNode, ignoreKeys, + ERManagement.updateProperties(oClass, element, jsonNode, ignoreKeys, ignoreStartWithKeys); } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/FacetManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/FacetManagement.java index 833311d..75ffb2a 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/FacetManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/FacetManagement.java @@ -46,7 +46,7 @@ public class FacetManagement extends EntityManagement { @Override public Vertex reallyUpdate() throws ResourceRegistryException { Vertex facet = getElement(); - facet = (Vertex) ERManagement.updateProperties(facet, jsonNode, ignoreKeys, ignoreStartWithKeys); + facet = (Vertex) ERManagement.updateProperties(oClass, facet, jsonNode, ignoreKeys, ignoreStartWithKeys); ((OrientVertex) facet).save(); return facet; } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java index c85a97a..ffe5425 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java @@ -220,7 +220,7 @@ public abstract class RelationManagement extends element = orientGraph.addEdge(null, source, target, erType); - ERManagement.updateProperties(element, jsonNode, ignoreKeys, + ERManagement.updateProperties(oClass, element, jsonNode, ignoreKeys, ignoreStartWithKeys); HeaderUtility.addHeader(element, null); @@ -263,7 +263,7 @@ public abstract class RelationManagement extends logger.debug("Trying to update {} : {}", erType, jsonNode); Edge edge = getElement(); - ERManagement.updateProperties(edge, jsonNode, ignoreKeys, + ERManagement.updateProperties(oClass, edge, jsonNode, ignoreKeys, ignoreStartWithKeys); if (ConsistsOf.class.isAssignableFrom(erTypeClass)) { diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/context/ContextManagementImplTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/context/ContextManagementImplTest.java index f7b1bce..008fb8b 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/context/ContextManagementImplTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/context/ContextManagementImplTest.java @@ -194,7 +194,7 @@ public class ContextManagementImplTest { logger.debug("The DB should be now clean"); } - //@Test + // @Test public void createDevContext() throws Exception { String gcubeJson = contextManagementImpl.create(null, "gcube"); Context gcubeContext = ISMapper.unmarshal(Context.class, gcubeJson); @@ -235,15 +235,16 @@ public class ContextManagementImplTest { // logger.debug("The DB should be now clean"); } - // @Test + //@Test public void removeContext() throws Exception { /* - * contextManagementImpl.delete(UUID .fromString("")); - * contextManagementImpl.delete(UUID .fromString("")); - * contextManagementImpl.delete(UUID .fromString("")); - * contextManagementImpl.delete(UUID .fromString("")); - * contextManagementImpl.delete(UUID .fromString("")); - */ + contextManagementImpl.delete(UUID .fromString("")); + contextManagementImpl.delete(UUID .fromString("")); + contextManagementImpl.delete(UUID .fromString("")); + contextManagementImpl.delete(UUID .fromString("")); + contextManagementImpl.delete(UUID .fromString("")); + */ + } @Test