diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/publisher/ResourceRegistryPublisherImpl.java b/src/main/java/org/gcube/informationsystem/resourceregistry/publisher/ResourceRegistryPublisherImpl.java index 7103daa..db2ce95 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/publisher/ResourceRegistryPublisherImpl.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/publisher/ResourceRegistryPublisherImpl.java @@ -7,6 +7,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import org.gcube.com.fasterxml.jackson.databind.JsonNode; +import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode; import org.gcube.common.gxhttp.reference.GXConnection; import org.gcube.common.gxhttp.request.GXHTTPStringRequest; import org.gcube.common.http.GXHTTPUtility; @@ -44,6 +46,7 @@ import org.gcube.informationsystem.resourceregistry.api.rest.SharingPath; import org.gcube.informationsystem.resourceregistry.api.rest.SharingPath.SharingOperation; import org.gcube.informationsystem.resourceregistry.api.rest.httputils.HTTPUtility; import org.gcube.informationsystem.serialization.ElementMapper; +import org.gcube.informationsystem.utils.JsonUtility; import org.gcube.informationsystem.utils.TypeUtility; import org.gcube.informationsystem.utils.UUIDManager; import org.gcube.informationsystem.utils.UUIDUtility; @@ -440,8 +443,14 @@ public class ResourceRegistryPublisherImpl extends BaseRequestInfo implements Re public String create(String json) throws SchemaViolationException, AlreadyPresentException, ResourceRegistryException { try { - ERElement e = ElementMapper.unmarshal(ERElement.class, json); - return internalCreate(e); + JsonNode jsonNode = JsonUtility.getJsonNode(json); + String type = TypeUtility.getTypeName(jsonNode); + UUID uuid = UUIDUtility.getUUID(jsonNode); + if(uuid==null) { + uuid = UUIDManager.getInstance().generateValidUUID(); + ((ObjectNode) jsonNode).put(ERElement.ID_PROPERTY, uuid.toString()); + } + return create(type, json, uuid); } catch (ResourceRegistryException e) { // logger.trace("Error Creating {}", facet, e); throw e; diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/publisher/NoGcubeModelTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/publisher/NoGcubeModelTest.java new file mode 100644 index 0000000..b819516 --- /dev/null +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/publisher/NoGcubeModelTest.java @@ -0,0 +1,46 @@ +/** + * + */ +package org.gcube.informationsystem.resourceregistry.publisher; + +import org.junit.Ignore; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * To properly use thois test you must comment + * gcube-model dependency + * @author Luca Frosini (ISTI - CNR) + */ +public class NoGcubeModelTest extends ContextTest { + + private static Logger logger = LoggerFactory.getLogger(NoGcubeModelTest.class); + + public static final String GROUP = "InformationSystem"; + public static final String NAME = "resource-registry"; + public static final String VERSION = "1.0.0"; + public static final String NEW_VERSION = "2.0.0"; + + protected ResourceRegistryPublisher resourceRegistryPublisher; + + public NoGcubeModelTest() { + Object rrURLOBj = ContextTest.properties.get(RESOURCE_REGISTRY_URL_PROPERTY); + if(rrURLOBj!=null && !rrURLOBj.toString().isEmpty()) { + resourceRegistryPublisher = new ResourceRegistryPublisherImpl(rrURLOBj.toString()); + }else { + resourceRegistryPublisher = ResourceRegistryPublisherFactory.create(); + } + resourceRegistryPublisher.setIncludeMeta(true); + resourceRegistryPublisher.setAllMeta(true); + } + + @Ignore + @Test + public void testCreateResourceFromJson() throws Exception { + String json = "{\"type\":\"VirtualService\",\"consistsOf\":[{\"type\":\"IsIdentifiedBy\",\"target\":{\"name\":\"aaaaaa\",\"optional\":\"true\",\"group\":\"xxxxx\",\"description\":\"\",\"version\":\"cvcvvv\",\"qualifier\":\"\",\"type\":\"SoftwareFacet\",\"aaaa\":\"dddddd\"}}]}"; + String ret = resourceRegistryPublisher.createResource(json); + logger.info(ret); + } + +}