From 92075c38b304eff6693cff4055dea036eea4f62f Mon Sep 17 00:00:00 2001 From: "luca.frosini" Date: Tue, 21 Nov 2017 17:18:11 +0000 Subject: [PATCH] Refs #10390: The serialized resource is the old verson in some cases after update Task-Url: https://support.d4science.org/issues/10390 git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@158739 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../resourceregistry/er/ERManagement.java | 19 +- .../er/entity/ResourceManagement.java | 3 + .../er/relation/RelationManagement.java | 18 +- .../resourceregistry/utils/HeaderUtility.java | 1 + .../er/entity/FacetManagementTest.java | 169 ++++++++++++++++++ .../er/entity/ResourceManagementTest.java | 64 +++++++ 6 files changed, 267 insertions(+), 7 deletions(-) create mode 100644 src/test/java/org/gcube/informationsystem/resourceregistry/er/entity/FacetManagementTest.java 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 527b678..2ca7fcf 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java @@ -87,7 +87,16 @@ public abstract class ERManagement { protected String erType; protected El element; + protected boolean reload; + public boolean isReload() { + return reload; + } + + public void setReload(boolean reload) { + this.reload = reload; + } + /** * This boolean is used to force the use of ADMIN user instead of the user of the context */ @@ -114,6 +123,8 @@ public abstract class ERManagement { this.ignoreStartWithKeys.add(AT); this.ignoreStartWithKeys.add(UNDERSCORE); + + this.reload = false; } protected ERManagement(AccessType accessType, OrientGraph orientGraph) { @@ -364,6 +375,10 @@ public abstract class ERManagement { throw new ResourceRegistryException(e); } + }else { + if(reload){ + ((OrientElement) element).reload(); + } } return element; } @@ -495,7 +510,9 @@ public abstract class ERManagement { orientGraph.commit(); + setReload(true); // TODO Notify to subscriptionNotification + return serialize(); // TODO Serialized resource is the old version. This really strange and should be an orient bug @@ -571,7 +588,7 @@ public abstract class ERManagement { orientGraph.commit(); logger.info("{} with UUID {} successfully added to actual Context", accessType.getName(), uuid); - + return added; } catch (Exception e) { logger.error("Unable to add {} with UUID {} to actual Context", diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/ResourceManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/ResourceManagement.java index df9428a..ed7dbd2 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/ResourceManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/ResourceManagement.java @@ -87,10 +87,13 @@ public class ResourceManagement extends EntityManagement { @SuppressWarnings("rawtypes") RelationManagement relationManagement = getRelationManagement(edge); + relationManagement.setReload(reload); + if(relationManagement.giveMeSourceEntityManagementAsIs()==null) { relationManagement.setSourceEntityManagement(this); } + if(relationManagement.giveMeSourceEntityManagementAsIs()!=this) { StringBuilder errorMessage = new StringBuilder(); errorMessage.append("SourceEntityManagement for "); 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 5a6f001..daaa473 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 @@ -105,6 +105,7 @@ public abstract class RelationManagement fullSerialize(Map visitedSourceResources) throws ResourceRegistryException { - Vertex source = element.getVertex(Direction.OUT); + + Vertex source = getElement().getVertex(Direction.OUT); String id = source.getId().toString(); JSONObject sourceResource = visitedSourceResources.get(id); + ResourceManagement resourceManagement = null; if (sourceResource == null) { - ResourceManagement resourceManagement = (ResourceManagement) ERManagementUtility - .getEntityManagement(orientGraph, source); + resourceManagement = (ResourceManagement) ERManagementUtility.getEntityManagement(orientGraph, source); if (this instanceof IsRelatedToManagement) { sourceResource = resourceManagement.serializeAsJson(); } else if (this instanceof ConsistsOfManagement) { @@ -182,7 +187,8 @@ public abstract class RelationManagement isIdentifiedBy = new IsIdentifiedByImpl( + eService, softwareFacet, null); + eService.addFacet(isIdentifiedBy); + + ResourceManagement resourceManagement = new ResourceManagement(); + resourceManagement.setElementType(EService.NAME); + resourceManagement.setJSON(ISMapper.marshal(eService)); + String json = resourceManagement.create(); + logger.trace("Created {}", json); + eService = ISMapper.unmarshal(EService.class, json); + + checkAssertion(eService, FacetManagementTest.VERSION, null, true); + + UUID uuid = eService.getHeader().getUUID(); + softwareFacet = eService.getFacets(SoftwareFacet.class).get(0); + + + /* Updating a Facet of the EService via EServcie update */ + softwareFacet.setVersion(FacetManagementTest.NEW_VERSION); + + resourceManagement = new ResourceManagement(); + resourceManagement.setUUID(eService.getHeader().getUUID()); + resourceManagement.setJSON(ISMapper.marshal(eService)); + + json = resourceManagement.update(); + logger.trace("Updated {}", json); + eService = ISMapper.unmarshal(EService.class, json); + + checkAssertion(eService, FacetManagementTest.NEW_VERSION, uuid, false); + + + resourceManagement = new ResourceManagement(); + resourceManagement.setUUID(eService.getHeader().getUUID()); + + boolean deleted = resourceManagement.delete(); + Assert.assertTrue(deleted); + } + + @Test public void testAllWithCostraint() throws ResourceRegistryException { String relationType = ConsistsOf.NAME;