From 2440e59082fe01691db2a0c42529df185d17aaae Mon Sep 17 00:00:00 2001 From: "luca.frosini" Date: Thu, 8 Sep 2016 09:57:10 +0000 Subject: [PATCH] Solving Resource marshalling/unmarshalling as json using jackson git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@131206 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../dbinitialization/SecurityContext.java | 144 +++++++++-------- .../SecurityContextMapper.java | 5 +- .../resources/impl/ContextManagementImpl.java | 18 ++- .../resources/impl/EntityManagementImpl.java | 35 ++++- .../resources/utils/Utility.java | 7 +- .../impl/ContextManagementImplTest.java | 2 +- .../impl/EntityManagementImplTest.java | 147 +++++++++++++----- 7 files changed, 234 insertions(+), 124 deletions(-) diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SecurityContext.java b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SecurityContext.java index 69d2ff3..5c08db6 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SecurityContext.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SecurityContext.java @@ -22,103 +22,121 @@ import com.tinkerpop.blueprints.impls.orient.OrientVertex; /** * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ - * + * */ public class SecurityContext { - + private static Logger logger = LoggerFactory .getLogger(SecurityContext.class); - + public static final String DEFAULT_WRITER_ROLE = "writer"; public static final String DEFAULT_READER_ROLE = "reader"; - public static void addToSecurityContext(OrientGraph orientGraph, Vertex vertex, String contextID){ + public static void addToSecurityContext(OrientGraph orientGraph, + Vertex vertex, String contextID) { OSecurity oSecurity = orientGraph.getRawGraph().getMetadata() .getSecurity(); SecurityContext.addToSecurityContext(oSecurity, vertex, contextID); } - - public static void addToSecurityContext(OSecurity oSecurity, Vertex vertex, String contextID){ + + public static void addToSecurityContext(OSecurity oSecurity, Vertex vertex, + String contextID) { OrientVertex orientVertex = (OrientVertex) vertex; - - SecurityContext.allowSecurityContextRoles(oSecurity, orientVertex.getRecord(), contextID); - + + SecurityContext.allowSecurityContextRoles(oSecurity, + orientVertex.getRecord(), contextID); + Iterable iterable = vertex.getEdges(Direction.BOTH); Iterator iterator = iterable.iterator(); - while(iterator.hasNext()){ + while (iterator.hasNext()) { OrientEdge edge = (OrientEdge) iterator.next(); - SecurityContext.allowSecurityContextRoles(oSecurity, edge.getRecord(), contextID); + SecurityContext.allowSecurityContextRoles(oSecurity, + edge.getRecord(), contextID); } } - - public static void addToSecurityContext(OrientGraph orientGraph, Edge edge, String contextID){ + + public static void addToSecurityContext(OrientGraph orientGraph, Edge edge, + String contextID) { OSecurity oSecurity = orientGraph.getRawGraph().getMetadata() .getSecurity(); SecurityContext.addToSecurityContext(oSecurity, edge, contextID); } - - public static void addToSecurityContext(OSecurity oSecurity, Edge edge, String contextID){ + + public static void addToSecurityContext(OSecurity oSecurity, Edge edge, + String contextID) { OrientEdge orientEdge = (OrientEdge) edge; - SecurityContext.allowSecurityContextRoles(oSecurity, orientEdge.getRecord(), contextID); + SecurityContext.allowSecurityContextRoles(oSecurity, + orientEdge.getRecord(), contextID); } - protected static void allowSecurityContextRoles(OSecurity oSecurity, ODocument oDocument, String contextID){ - oSecurity.allowRole(oDocument, ORestrictedOperation.ALLOW_ALL, + protected static void allowSecurityContextRoles(OSecurity oSecurity, + ODocument oDocument, String contextID) { + oSecurity.allowRole(oDocument, ORestrictedOperation.ALLOW_ALL, SecurityContextMapper.getSecurityRoleOrUserName( - SecurityContextMapper.PermissionMode.WRITER, + SecurityContextMapper.PermissionMode.WRITER, SecurityContextMapper.SecurityType.ROLE, contextID)); - - oSecurity.allowRole(oDocument, ORestrictedOperation.ALLOW_READ, + + oSecurity.allowRole(oDocument, ORestrictedOperation.ALLOW_READ, SecurityContextMapper.getSecurityRoleOrUserName( - SecurityContextMapper.PermissionMode.READER, + SecurityContextMapper.PermissionMode.READER, SecurityContextMapper.SecurityType.ROLE, contextID)); - - //oSecurity.allowRole(oDocument, ORestrictedOperation.ALLOW_ALL, DEFAULT_WRITER_ROLE); - //oSecurity.allowRole(oDocument, ORestrictedOperation.ALLOW_READ, DEFAULT_READER_ROLE); - + + // oSecurity.allowRole(oDocument, ORestrictedOperation.ALLOW_ALL, + // DEFAULT_WRITER_ROLE); + // oSecurity.allowRole(oDocument, ORestrictedOperation.ALLOW_READ, + // DEFAULT_READER_ROLE); + } - - public static void createSecurityContext(OrientGraph orientGraph, String contextID){ + + public static void createSecurityContext(OrientGraph orientGraph, + String contextID, boolean commit) { OSecurity oSecurity = orientGraph.getRawGraph().getMetadata() .getSecurity(); ORole writer = oSecurity.getRole(DEFAULT_WRITER_ROLE); ORole reader = oSecurity.getRole(DEFAULT_READER_ROLE); - ORole writerRole = oSecurity.createRole( - SecurityContextMapper.getSecurityRoleOrUserName( - SecurityContextMapper.PermissionMode.WRITER, - SecurityContextMapper.SecurityType.ROLE, contextID), + ORole writerRole = oSecurity.createRole(SecurityContextMapper + .getSecurityRoleOrUserName( + SecurityContextMapper.PermissionMode.WRITER, + SecurityContextMapper.SecurityType.ROLE, contextID), writer, ALLOW_MODES.DENY_ALL_BUT); - - ORole readerRole = oSecurity.createRole( - SecurityContextMapper.getSecurityRoleOrUserName( - SecurityContextMapper.PermissionMode.READER, + + ORole readerRole = oSecurity.createRole(SecurityContextMapper + .getSecurityRoleOrUserName( + SecurityContextMapper.PermissionMode.READER, SecurityContextMapper.SecurityType.ROLE, contextID), reader, ALLOW_MODES.DENY_ALL_BUT); - - oSecurity.createUser( - SecurityContextMapper.getSecurityRoleOrUserName( - SecurityContextMapper.PermissionMode.WRITER, - SecurityContextMapper.SecurityType.USER, contextID), - DatabaseEnvironment.DEFAULT_PASSWORDS.get(SecurityContextMapper.PermissionMode.WRITER) , - writerRole); - oSecurity.createUser( - SecurityContextMapper.getSecurityRoleOrUserName( - SecurityContextMapper.PermissionMode.READER, - SecurityContextMapper.SecurityType.USER, contextID), - DatabaseEnvironment.DEFAULT_PASSWORDS.get(SecurityContextMapper.PermissionMode.READER), - readerRole); - - // Commit MUST BE invoked in caller method - //orientGraph.commit(); + + oSecurity.createUser(SecurityContextMapper.getSecurityRoleOrUserName( + SecurityContextMapper.PermissionMode.WRITER, + SecurityContextMapper.SecurityType.USER, contextID), + DatabaseEnvironment.DEFAULT_PASSWORDS + .get(SecurityContextMapper.PermissionMode.WRITER), + writerRole); + oSecurity.createUser(SecurityContextMapper.getSecurityRoleOrUserName( + SecurityContextMapper.PermissionMode.READER, + SecurityContextMapper.SecurityType.USER, contextID), + DatabaseEnvironment.DEFAULT_PASSWORDS + .get(SecurityContextMapper.PermissionMode.READER), + readerRole); + + if (commit) { + orientGraph.commit(); + } + + logger.trace( + "Security Context (roles and users) with UUID {} successfully created", + contextID); } - + public static void deleteSecurityContext(OrientGraph orientGraph, - String contextID) { - - logger.trace("Going to remove Security Context (roles and users) with UUID {}", contextID); - + String contextID, boolean commit) { + + logger.trace( + "Going to remove Security Context (roles and users) with UUID {}", + contextID); + OSecurity oSecurity = orientGraph.getRawGraph().getMetadata() .getSecurity(); @@ -134,11 +152,13 @@ public class SecurityContext { oSecurity.dropRole(SecurityContextMapper.getSecurityRoleOrUserName( SecurityContextMapper.PermissionMode.WRITER, SecurityContextMapper.SecurityType.ROLE, contextID)); - - // Commit MUST BE invoked in caller method - //orientGraph.commit(); - - logger.trace("Security Context (roles and users) with UUID {} successfully removed", contextID); + if (commit) { + orientGraph.commit(); + } + + logger.trace( + "Security Context (roles and users) with UUID {} successfully removed", + contextID); } } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SecurityContextMapper.java b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SecurityContextMapper.java index b06a1cc..1445bac 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SecurityContextMapper.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/dbinitialization/SecurityContextMapper.java @@ -49,12 +49,11 @@ public abstract class SecurityContextMapper { if(created){ OrientGraph orientGraph = factory.getTx(); - SecurityContext.createSecurityContext(orientGraph, MANAGEMENT_SECURITY_CONTEXT); - orientGraph.commit(); + SecurityContext.createSecurityContext(orientGraph, MANAGEMENT_SECURITY_CONTEXT, true); + getSecurityContextFactory(MANAGEMENT_SECURITY_CONTEXT, PermissionMode.READER); getSecurityContextFactory(MANAGEMENT_SECURITY_CONTEXT, PermissionMode.WRITER); - DatabaseIntializator.createEntitiesAndRelations(); } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/resources/impl/ContextManagementImpl.java b/src/main/java/org/gcube/informationsystem/resourceregistry/resources/impl/ContextManagementImpl.java index 0d35ac7..e17fb38 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/resources/impl/ContextManagementImpl.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/resources/impl/ContextManagementImpl.java @@ -133,13 +133,15 @@ public class ContextManagementImpl implements ContextManagement { } catch (ContextException e) { throw new ContextCreationException(e.getMessage()); } + + UUID uuid = UUID.randomUUID(); + String uuidString = uuid.toString(); + + SecurityContext.createSecurityContext(orientGraph, uuidString, true); + try { - UUID uuid = UUID.randomUUID(); - String uuidString = uuid.toString(); - - SecurityContext.createSecurityContext(orientGraph, uuidString); - + FramedGraphFactory framedGraphFactory = new FramedGraphFactory(); FramedGraph framedGraph = framedGraphFactory .create(orientGraph); @@ -164,14 +166,16 @@ public class ContextManagementImpl implements ContextManagement { logger.trace("Creating {}", contextJsonString); orientGraph.commit(); - orientGraph.shutdown(); logger.info("Context {} created", contextJsonString); return uuidString; } catch (Exception e) { orientGraph.rollback(); + SecurityContext.deleteSecurityContext(orientGraph, uuidString, true); throw new InternalException(e.getMessage()); + } finally { + orientGraph.shutdown(); } } @@ -301,7 +305,7 @@ public class ContextManagementImpl implements ContextManagement { "Only context with no children can be deleted"); } - SecurityContext.deleteSecurityContext(orientGraph, uuid); + SecurityContext.deleteSecurityContext(orientGraph, uuid, false); context.remove(); 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 8ffbe08..b372b12 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 @@ -3,6 +3,7 @@ */ package org.gcube.informationsystem.resourceregistry.resources.impl; +import java.io.IOException; import java.util.Iterator; import java.util.Map.Entry; import java.util.Set; @@ -10,9 +11,9 @@ import java.util.Set; import org.gcube.informationsystem.model.entity.Entity; import org.gcube.informationsystem.model.entity.Facet; import org.gcube.informationsystem.model.entity.Resource; +import org.gcube.informationsystem.model.relation.ConsistsOf; import org.gcube.informationsystem.model.relation.IsRelatedTo; import org.gcube.informationsystem.model.relation.Relation; -import org.gcube.informationsystem.model.relation.ConsistsOf; import org.gcube.informationsystem.resourceregistry.api.EntityManagement; import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.FacetNotFoundException; @@ -25,6 +26,7 @@ import org.gcube.informationsystem.resourceregistry.resources.utils.Utility; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.tinkerpop.blueprints.Edge; @@ -132,8 +134,12 @@ public class EntityManagementImpl implements EntityManagement { entityVertex.save(); orientGraph.commit(); - return Utility - .orientVertexToJsonString((OrientVertex) entityVertex); + logger.trace("Created {} is {} orientVertexToJsonString", Vertex.class.getSimpleName(), + Utility.orientVertexToJsonString((OrientVertex) entityVertex, true)); + + return Utility.orientVertexToJsonString((OrientVertex) entityVertex, false); + //return Utility.orientVertexToJsonString((OrientVertex) entityVertex); + } catch (Exception e) { if (orientGraph != null) { @@ -251,7 +257,9 @@ public class EntityManagementImpl implements EntityManagement { Vertex facet = getEntity(orientGraph, uuid, facetType, Facet.class); - return Utility.orientVertexToJsonString((OrientVertex) facet); + logger.trace("{} of type {} with UUID {} is {}", Facet.NAME, facetType, uuid, Utility.orientVertexToJsonString((OrientVertex) facet, true)); + + return Utility.orientVertexToJsonString((OrientVertex) facet, true); } catch (FacetNotFoundException fnfe) { throw fnfe; } catch (Exception e) { @@ -314,7 +322,11 @@ public class EntityManagementImpl implements EntityManagement { ((OrientVertex) facet).save(); orientGraph.commit(); - return Utility.orientVertexToJsonString((OrientVertex) facet); + + logger.trace("{} with UUID {} has been updated {}", Facet.NAME, uuid, Utility.orientVertexToJsonString((OrientVertex) facet, true)); + + + return Utility.orientVertexToJsonString((OrientVertex) facet, false); } catch (FacetNotFoundException fnfe) { if (orientGraph != null) { @@ -455,6 +467,13 @@ public class EntityManagementImpl implements EntityManagement { @Override public String createResource(String resourceType, String jsonRepresentation) throws ResourceRegistryException { + try { + JsonNode jsonNode = org.gcube.informationsystem.impl.utils.Utility.getJSONNode(jsonRepresentation); + } catch (IOException e) { + throw new ResourceRegistryException(e); + } + + return createVertexEntity(resourceType, Resource.class, jsonRepresentation); } @@ -477,8 +496,10 @@ public class EntityManagementImpl implements EntityManagement { Resource.class); // TODO get all attached facets - - return Utility.orientVertexToJsonString((OrientVertex) resource); + logger.trace("{} of type {} with UUID {} is {}", Resource.NAME, resourceType, uuid, Utility.orientVertexToJsonString((OrientVertex) resource, true)); + + + return Utility.orientVertexToJsonString((OrientVertex) resource, false); } catch (ResourceNotFoundException rnfe) { throw rnfe; } catch (Exception e) { diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/resources/utils/Utility.java b/src/main/java/org/gcube/informationsystem/resourceregistry/resources/utils/Utility.java index 09042da..8cf0b5d 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/resources/utils/Utility.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/resources/utils/Utility.java @@ -35,9 +35,12 @@ public class Utility { private static final Logger logger = LoggerFactory.getLogger(Utility.class); - public static String orientVertexToJsonString(OrientVertex orientVertex) { + public static String orientVertexToJsonString(OrientVertex orientVertex, boolean raw) { ORecord oRecord = orientVertex.getRecord(); - return oRecord.toJSON(); + if(raw){ + return oRecord.toJSON(); + } + return oRecord.toJSON("class"); } public static String vertexToJsonString(Vertex vertex, boolean raw) diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/resources/impl/ContextManagementImplTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/resources/impl/ContextManagementImplTest.java index 7f5a78a..f533fa7 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/resources/impl/ContextManagementImplTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/resources/impl/ContextManagementImplTest.java @@ -155,7 +155,7 @@ public class ContextManagementImplTest { } - //@Test + @Test public void devContextTest() throws ContextNotFoundException, ContextException, InternalException { String gcube = contextManagementImpl.create(null, "gcube"); logger.trace("/gcube : {}", gcube); diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/resources/impl/EntityManagementImplTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/resources/impl/EntityManagementImplTest.java index 7e1c78b..88b81cf 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/resources/impl/EntityManagementImplTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/resources/impl/EntityManagementImplTest.java @@ -4,6 +4,7 @@ package org.gcube.informationsystem.resourceregistry.resources.impl; import java.io.StringWriter; +import java.util.UUID; import org.codehaus.jettison.json.JSONObject; import org.gcube.common.scope.api.ScopeProvider; @@ -20,13 +21,11 @@ import org.gcube.informationsystem.model.entity.resource.HostingNode; import org.gcube.informationsystem.model.relation.ConsistsOf; import org.gcube.informationsystem.model.relation.Relation; import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.FacetNotFoundException; +import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - /** * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * @@ -46,46 +45,63 @@ public class EntityManagementImplTest { public void testCreateReadDeleteFacet() throws Exception { ScopeProvider.instance.set("/gcube/devNext"); - CPUFacetImpl cpuFacetImpl = new CPUFacetImpl(); - cpuFacetImpl.setClockSpeed("1 GHz"); - cpuFacetImpl.setModel("Opteron"); - cpuFacetImpl.setVendor("AMD"); - StringWriter stringWriter = new StringWriter(); - Entities.marshal(cpuFacetImpl, stringWriter); - - String json = entityManagementImpl.createFacet( - CPUFacet.class.getSimpleName(), stringWriter.toString()); - logger.debug("Created : {}", json); - - String uuid = Utility.getUUIDFromJSONString(json); - - String readJson = entityManagementImpl.readFacet(uuid); - logger.debug("Read : {}", readJson); - - stringWriter = new StringWriter(); - Entities.marshal(cpuFacetImpl, stringWriter); - cpuFacetImpl.setVendor("Luca"); - - String newclockSpeed = "2 GHz"; - JsonNode jsonNode = Utility.getJSONNode(stringWriter.toString()); - ((ObjectNode) jsonNode).put("clockSpeed", newclockSpeed); - ((ObjectNode) jsonNode).put("My", "Test"); - - stringWriter = new StringWriter(); - Entities.marshal(jsonNode, stringWriter); - - readJson = entityManagementImpl.updateFacet(uuid, - stringWriter.toString()); - logger.debug("Updated : {}", readJson); - - readJson = entityManagementImpl.readFacet(uuid); - logger.debug("Read Updated : {}", readJson); - - boolean deleted = entityManagementImpl.deleteFacet(uuid); - if (!deleted) { - throw new Exception("Facet Not Deleted"); - } + CPUFacet cpuFacet = new CPUFacetImpl(); + cpuFacet.setClockSpeed("1 GHz"); + cpuFacet.setModel("Opteron"); + cpuFacet.setVendor("AMD"); + + + String cpuFacetJson = entityManagementImpl.createFacet(CPUFacet.class.getSimpleName(), Entities.marshal(cpuFacet)); + CPUFacet createdCpuFacet = Entities.unmarshal(CPUFacet.class, cpuFacetJson); + logger.debug("Created:\nRaw Json : {}\nUnmarshalled : {}", cpuFacetJson, createdCpuFacet); + + Assert.assertTrue(cpuFacet.getClockSpeed().compareTo(createdCpuFacet.getClockSpeed())==0); + Assert.assertTrue(cpuFacet.getModel().compareTo(createdCpuFacet.getModel())==0); + Assert.assertTrue(cpuFacet.getVendor().compareTo(createdCpuFacet.getVendor())==0); + + UUID uuid = createdCpuFacet.getHeader().getUUID(); + + + String readJson = entityManagementImpl.readFacet(uuid.toString()); + CPUFacet readCpuFacet = Entities.unmarshal(CPUFacet.class, readJson); + logger.debug("Read:\nRaw Json : {}\nUnmarshalled : {}", readJson, readCpuFacet); + Assert.assertTrue(cpuFacet.getClockSpeed().compareTo(readCpuFacet.getClockSpeed())==0); + Assert.assertTrue(cpuFacet.getModel().compareTo(readCpuFacet.getModel())==0); + Assert.assertTrue(cpuFacet.getVendor().compareTo(readCpuFacet.getVendor())==0); + Assert.assertTrue(uuid.compareTo(readCpuFacet.getHeader().getUUID())==0); + + String newVendor = "Intel"; + String newClockSpeed = "2 GHz"; + readCpuFacet.setVendor(newVendor); + readCpuFacet.setClockSpeed(newClockSpeed); + + String additionPropertyKey = "My"; + String additionPropertyValue = "Test"; + readCpuFacet.setAdditionalProperty(additionPropertyKey, additionPropertyValue); + + String updatedJson = entityManagementImpl.updateFacet(uuid.toString(),Entities.marshal(readCpuFacet)); + CPUFacet updatedCpuFacet = Entities.unmarshal(CPUFacet.class, updatedJson); + logger.debug("Updated:\nRaw Json : {}\nUnmarshalled : {}", updatedJson, updatedCpuFacet); + Assert.assertTrue(readCpuFacet.getClockSpeed().compareTo(updatedCpuFacet.getClockSpeed())==0); + Assert.assertTrue(readCpuFacet.getModel().compareTo(updatedCpuFacet.getModel())==0); + Assert.assertTrue(readCpuFacet.getVendor().compareTo(updatedCpuFacet.getVendor())==0); + Assert.assertTrue(((String) updatedCpuFacet.getAdditionalProperty(additionPropertyKey)).compareTo((String) readCpuFacet.getAdditionalProperty(additionPropertyKey))==0); + Assert.assertTrue(uuid.compareTo(updatedCpuFacet.getHeader().getUUID())==0); + + + String readUpdatedJson = entityManagementImpl.readFacet(uuid.toString()); + CPUFacet readUpdatedCpuFacet = Entities.unmarshal(CPUFacet.class, readUpdatedJson); + logger.debug("Read Updated:\nRaw Json : {}\nUnmarshalled : {}", readUpdatedJson, readUpdatedCpuFacet); + Assert.assertTrue(updatedCpuFacet.getClockSpeed().compareTo(readUpdatedCpuFacet.getClockSpeed())==0); + Assert.assertTrue(updatedCpuFacet.getModel().compareTo(readUpdatedCpuFacet.getModel())==0); + Assert.assertTrue(updatedCpuFacet.getVendor().compareTo(readUpdatedCpuFacet.getVendor())==0); + Assert.assertTrue(((String)updatedCpuFacet.getAdditionalProperty(additionPropertyKey)).compareTo((String) readUpdatedCpuFacet.getAdditionalProperty(additionPropertyKey))==0); + Assert.assertTrue(uuid.compareTo(updatedCpuFacet.getHeader().getUUID())==0); + + boolean deleted = entityManagementImpl.deleteFacet(uuid.toString()); + Assert.assertTrue(deleted); + } @Test @@ -283,4 +299,51 @@ public class EntityManagementImplTest { } + @Test + public void testCreateResourceAndFacetTogheter() throws Exception { + ScopeProvider.instance.set("/gcube/devsec"); + + CPUFacetImpl cpuFacet = new CPUFacetImpl(); + cpuFacet.setClockSpeed("2 GHz"); + cpuFacet.setModel("Celeron"); + cpuFacet.setVendor("Intel"); + StringWriter stringWriter = new StringWriter(); + Entities.marshal(cpuFacet, stringWriter); + + String json = entityManagementImpl.createFacet(CPUFacet.class.getSimpleName(), + stringWriter.toString()); + logger.debug("Created : {}", json); + String createdFacetUUID = Utility.getUUIDFromJSONString(json); + + + + HostingNode hostingNode = new HostingNodeImpl(); + + CPUFacetImpl cpuFacetImpl = new CPUFacetImpl(); + cpuFacetImpl.setClockSpeed("1 GHz"); + cpuFacetImpl.setModel("Opteron"); + cpuFacetImpl.setVendor("AMD"); + + hostingNode.addFacet(cpuFacetImpl); + + hostingNode.attachFacet(UUID.fromString(createdFacetUUID)); + + + StringWriter resourceStringWriter = new StringWriter(); + Entities.marshal(hostingNode, resourceStringWriter); + logger.trace(resourceStringWriter.toString()); + + + + + + json = entityManagementImpl.createResource( + HostingNode.class.getSimpleName(), resourceStringWriter.toString()); + String resourceUUID = Utility.getUUIDFromJSONString(json); + + + + //entityManagementImpl.deleteResource(resourceUUID); + + } }