From daf61bc522dcee17e471580442624618c07e9305 Mon Sep 17 00:00:00 2001 From: "luca.frosini" Date: Thu, 17 Nov 2016 17:28:05 +0000 Subject: [PATCH] Fixing bug on properties git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@134345 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../resources/impl/EntityManagementImpl.java | 174 ++++++++++++------ src/test/resources/logback-test.xml | 1 + 2 files changed, 119 insertions(+), 56 deletions(-) diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/resources/impl/EntityManagementImpl.java b/src/main/java/org/gcube/informationsystem/resourceregistry/resources/impl/EntityManagementImpl.java index 2d86786..636d2ff 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/resources/impl/EntityManagementImpl.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/resources/impl/EntityManagementImpl.java @@ -48,7 +48,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.fasterxml.jackson.databind.node.NullNode; +import com.orientechnologies.orient.core.record.impl.ODocument; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Vertex; @@ -144,7 +144,7 @@ public class EntityManagementImpl implements EntityManagement { return null; } - private static void checkEmbeddedType(JsonNode jsonNode) + private static ODocument getEmbeddedType(JsonNode jsonNode) throws ResourceRegistryException { if (jsonNode.has(Entities.CLASS_PROPERTY)) { // Complex type @@ -172,63 +172,67 @@ public class EntityManagementImpl implements EntityManagement { throw new ResourceRegistryException( "An embedded object cannot have an Header"); } + + ODocument oDocument = new ODocument(type); + return oDocument.fromJSON(jsonNode.toString()); } + return null; } public static Object getObejctFromElement(JsonNode value) throws ResourceRegistryException { JsonNodeType jsonNodeType = value.getNodeType(); + switch (jsonNodeType) { - case OBJECT: - checkEmbeddedType(value); - return null; - - case ARRAY: - List array = new ArrayList<>(); - Iterator arrayElement = value.elements(); - while (arrayElement.hasNext()) { - JsonNode arrayNode = arrayElement.next(); - Object objectNode = getObejctFromElement(arrayNode); - if (objectNode != null) { - array.add(objectNode); + case OBJECT: + return getEmbeddedType(value); + + case ARRAY: + List array = new ArrayList<>(); + Iterator arrayElement = value.elements(); + while (arrayElement.hasNext()) { + JsonNode arrayNode = arrayElement.next(); + Object objectNode = getObejctFromElement(arrayNode); + if (objectNode != null) { + array.add(objectNode); + } } - } - return array; - - case BINARY: - break; - - case BOOLEAN: - return value.asBoolean(); - - case NULL: - break; - - case NUMBER: - if (value.isDouble() || value.isFloat()) { - return value.asDouble(); - } - if (value.isBigInteger() || value.isShort() || value.isInt()) { - return value.asInt(); - } - - if (value.isLong()) { - return value.asLong(); - } - break; - - case STRING: - return value.asText(); - - case MISSING: - break; - - case POJO: - break; - - default: - break; + return array; + + case BINARY: + break; + + case BOOLEAN: + return value.asBoolean(); + + case NULL: + break; + + case NUMBER: + if (value.isDouble() || value.isFloat()) { + return value.asDouble(); + } + if (value.isBigInteger() || value.isShort() || value.isInt()) { + return value.asInt(); + } + + if (value.isLong()) { + return value.asLong(); + } + break; + + case STRING: + return value.asText(); + + case MISSING: + break; + + case POJO: + break; + + default: + break; } return null; @@ -239,6 +243,10 @@ public class EntityManagementImpl implements EntityManagement { Map map = new HashMap<>(); + if(ignoreKeys == null){ + ignoreKeys = new HashSet<>(); + } + Iterator> fields = jsonNode.fields(); while (fields.hasNext()) { Entry entry = fields.next(); @@ -334,6 +342,7 @@ public class EntityManagementImpl implements EntityManagement { Set ignoreKeys = new HashSet<>(); ignoreKeys.add(Relation.TARGET_PROPERTY); ignoreKeys.add(Relation.SOURCE_PROPERTY); + ignoreKeys.add(Relation.HEADER_PROPERTY); Map edgeProperties = null; try { @@ -403,6 +412,30 @@ public class EntityManagementImpl implements EntityManagement { if (Resource.class.isAssignableFrom(entity)) { // Facet and relation are created in calling method } else { + Set ignoreKeys = new HashSet<>(); + Map properties = null; + try { + properties = getPropertyMap(jsonNode, ignoreKeys); + } catch (Exception e) { + String error = "Error while parsing json to get Relation properties"; + logger.error(error, e); + throw new ResourceRegistryException(error, e); + } + + for (String key : properties.keySet()) { + try { + vertex.setProperty(key, properties.get(key)); + } catch (Exception e) { + String error = String.format( + "Error while setting property %s : %s", key, + properties.get(key).toString()); + logger.error(error); + throw new ResourceRegistryException(error, e); + } + } + + + /* Iterator> iterator = jsonNode.fields(); while (iterator.hasNext()) { Entry entry = iterator.next(); @@ -418,6 +451,7 @@ public class EntityManagementImpl implements EntityManagement { vertex.setProperty(entry.getKey(), value.asText()); } } + */ } ContextUtility.addToActualContext(orientGraph, vertex); @@ -522,7 +556,7 @@ public class EntityManagementImpl implements EntityManagement { Map edgeProperties, boolean deferredCommit) throws ResourceRegistryException { - logger.debug("Trying to create {} with {}", relationType, + logger.debug("Trying to create {} with properties {}", relationType, edgeProperties); try { @@ -571,20 +605,20 @@ public class EntityManagementImpl implements EntityManagement { orientGraph.commit(); } - logger.info("{} with {} successfully created", relationType, + logger.info("{} with properties {} successfully created", relationType, edgeProperties); return edge; } catch (ResourceRegistryException rre) { - logger.error("Error Creating {} with {}", relationType, + logger.error("Error Creating {} with properties {}", relationType, edgeProperties, rre); if (orientGraph != null) { orientGraph.rollback(); } throw rre; } catch (Exception e) { - logger.error("Error Creating {} with {}", relationType, + logger.error("Error Creating {} with properties {}", relationType, edgeProperties, e); if (orientGraph != null) { orientGraph.rollback(); @@ -668,6 +702,33 @@ public class EntityManagementImpl implements EntityManagement { Set oldKeys = facet.getPropertyKeys(); + + Set ignoreKeys = new HashSet<>(); + Map properties = null; + try { + properties = getPropertyMap(jsonNode, ignoreKeys); + } catch (Exception e) { + String error = "Error while parsing json to get Relation properties"; + logger.error(error, e); + throw new ResourceRegistryException(error, e); + } + + oldKeys.removeAll(properties.keySet()); + + for (String key : properties.keySet()) { + try { + facet.setProperty(key, properties.get(key)); + } catch (Exception e) { + String error = String.format( + "Error while setting property %s : %s", key, + properties.get(key).toString()); + logger.error(error); + throw new ResourceRegistryException(error, e); + } + } + + + /* Iterator> iterator = jsonNode.fields(); while (iterator.hasNext()) { @@ -690,14 +751,15 @@ public class EntityManagementImpl implements EntityManagement { oldKeys.remove(key); } - + */ + for (String key : oldKeys) { if (key.startsWith("_")) { continue; } facet.removeProperty(key); } - + ((OrientVertex) facet).save(); orientGraph.commit(); diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml index b8c82c5..f915c5c 100644 --- a/src/test/resources/logback-test.xml +++ b/src/test/resources/logback-test.xml @@ -13,6 +13,7 @@ +