gcat/src/test/java/org/gcube/gcat/persistence/ckan/CKANPackageTest.java

466 lines
22 KiB
Java

package org.gcube.gcat.persistence.ckan;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.ws.rs.ForbiddenException;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import org.gcube.common.authorization.client.exceptions.ObjectNotFound;
import org.gcube.common.resources.gcore.GenericResource;
import org.gcube.common.resources.gcore.Resources;
import org.gcube.common.scope.impl.ScopeBean;
import org.gcube.gcat.ContextTest;
import org.gcube.gcat.api.GCatConstants;
import org.gcube.gcat.utils.ContextUtility;
import org.gcube.informationsystem.publisher.RegistryPublisher;
import org.gcube.informationsystem.publisher.RegistryPublisherFactory;
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.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class CKANPackageTest extends ContextTest {
private static Logger logger = LoggerFactory.getLogger(CKANPackageTest.class);
private static final String NOTES_KEY = "notes";
private static final String URL_KEY = "url";
private static final String PRIVATE_KEY = "private";
private static final String ITEM_NAME_VALUE = "restful_transaction_model";
private static final String LICENSE_VALUE = "CC-BY-SA-4.0";
private static final String EXTRAS_TYPE_VALUE_VALUE = "TestEmptyProfile";
@Test
public void list() throws Exception {
CKANPackage ckanPackage = new CKANPackage();
ObjectMapper mapper = new ObjectMapper();
String ret = ckanPackage.list(10, 0);
JsonNode gotList = mapper.readTree(ret);
Assert.assertTrue(gotList instanceof ArrayNode);
logger.debug("List :\n{}", mapper.writeValueAsString(gotList));
}
@Test
public void listWithParameters() throws Exception {
String contextName = "/gcube/devNext/NextNext";
ScopeBean scopeBean = new ScopeBean(contextName);
String ckanOrganizationName = CKANPackage.getOrganizationName(scopeBean);
ContextTest.setContextByName(contextName);
CKANPackage ckanPackage = new CKANPackage();
ObjectMapper mapper = new ObjectMapper();
Map<String,String> parameters = new HashMap<>();
parameters.put(CKANPackage.ROWS_KEY, String.valueOf(10));
parameters.put(CKANPackage.START_KEY, String.valueOf(0));
boolean[] values = new boolean[]{true, false};
for(boolean includeValidOrganization : values) {
for(boolean includeFakeOrganization : values) {
MultivaluedMap<String,String> queryParameters = new MultivaluedHashMap<>();
StringWriter stringWriter = new StringWriter();
boolean addOr = false;
if(includeFakeOrganization) {
stringWriter.append("organization:fakeorganization");
addOr = true;
}
if(includeValidOrganization) {
if(addOr) {
stringWriter.append(" OR ");
}
stringWriter.append("organization:");
stringWriter.append(ckanOrganizationName);
}
String filter = stringWriter.toString();
if(filter.length()>0) {
queryParameters.add(GCatConstants.Q_KEY, filter);
}
/*
parameters.put("fl","[\"name\"]");
*/
/*
parameters.put("facet.field","[\"name\"]");
parameters.put("sort","name asc");
*/
try {
parameters = ckanPackage.checkListParameters(queryParameters, parameters);
}catch (ForbiddenException e) {
if(includeFakeOrganization) {
// This is the expected behaviour
continue;
}else {
throw e;
}
}
String ret = ckanPackage.list(parameters);
JsonNode gotList = mapper.readTree(ret);
Assert.assertTrue(gotList instanceof ArrayNode);
logger.debug("List :\n{}", mapper.writeValueAsString(gotList));
}
}
}
protected GenericResource instantiateGenericResource(String secondaryType, String name, String xml) throws Exception {
GenericResource genericResource = new GenericResource();
org.gcube.common.resources.gcore.GenericResource.Profile profile = genericResource.newProfile();
profile.type(secondaryType);
profile.name(name);
profile.description("This resource is read by gCat and define the list of CKAN organizations where a client is allowed to publish for the current context");
profile.newBody(xml);
StringWriter stringWriter = new StringWriter();
Resources.marshal(genericResource, stringWriter);
logger.debug("The generated {} is\n{}", GenericResource.class.getSimpleName(), stringWriter.toString());
return genericResource;
}
protected void createGenericResource(String xml) throws Exception {
GenericResource genericResource = instantiateGenericResource(
CKANPackage.GENERIC_RESOURCE_SECONDARY_TYPE_FOR_ORGANIZATIONS,
CKANPackage.GENERIC_RESOURCE_NAME_FOR_ORGANIZATIONS, xml);
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
genericResource = registryPublisher.create(genericResource);
StringWriter stringWriter = new StringWriter();
Resources.marshal(genericResource, stringWriter);
logger.trace("The {} with ID {} has been created \n{}", GenericResource.class.getSimpleName(),
genericResource.id(), stringWriter.toString());
}
protected String createXMLFragment(List<String> organizations) throws Exception {
if(organizations==null || organizations.size()<1) {
throw new Exception("Unable to create the XML fragment for the generic resource with empty organization list");
}
StringWriter stringWriter = new StringWriter();
stringWriter.append("<");
stringWriter.append(CKANPackage.GENERIC_RESOURCE_TAG_NAME_PLURAL);
stringWriter.append(">");
for(String organizationName : organizations) {
stringWriter.append("<");
stringWriter.append(CKANPackage.GENERIC_RESOURCE_TAG_NAME);
stringWriter.append(">");
stringWriter.append(organizationName);
stringWriter.append("</");
stringWriter.append(CKANPackage.GENERIC_RESOURCE_TAG_NAME);
stringWriter.append(">");
}
stringWriter.append("</");
stringWriter.append(CKANPackage.GENERIC_RESOURCE_TAG_NAME_PLURAL);
stringWriter.append(">");
return stringWriter.toString();
}
protected void createGenericResourceForSupportedOrganizations(List<String> organizations) throws Exception {
String xml = createXMLFragment(organizations);
createGenericResource(xml);
}
// @Test
public void createGenericResourceForSupportedOrganizationsByName() throws Exception {
List<String> organizations = new ArrayList<>();
organizations.add("nextnext");
organizations.add("devvre");
createGenericResourceForSupportedOrganizations(organizations);
}
// @Test
public void createGenericResourceForSupportedOrganizationsByScopeBean() throws Exception {
ContextTest.setContextByName("/gcube/devNext/NextNext");
List<ScopeBean> scopeBeans = new ArrayList<>();
scopeBeans.add(new ScopeBean("/gcube/devNext/NextNext"));
scopeBeans.add(new ScopeBean("/gcube/devsec/devVRE"));
List<String> organizations = new ArrayList<>();
for(ScopeBean scopeBean : scopeBeans) {
organizations.add(CKANPackage.getOrganizationName(scopeBean));
}
createGenericResourceForSupportedOrganizations(organizations);
}
@Test
public void testGetSupportedOrganizationsFromIS() throws ObjectNotFound, Exception {
ContextTest.setContextByName("/gcube/devNext/NextNext");
CKANPackage ckanPackage = new CKANPackage();
Set<String> organizations = ckanPackage.getSupportedOrganizationsFromIS();
Assert.assertTrue(organizations.size()>0);
}
@Test(expected=ForbiddenException.class)
public void checkParameter() throws Exception {
ContextTest.setContextByName("/gcube/devNext/NextNext");
Map<String, String> parameters = new HashMap<>();
CKANPackage ckanPackage = new CKANPackage();
MultivaluedMap<String,String> queryParameters = new MultivaluedHashMap<>();
queryParameters.add(GCatConstants.Q_KEY, "organization:nextnext OR organization:fakeorg");
parameters = ckanPackage.checkListParameters(queryParameters, parameters);
logger.debug("{}", parameters);
}
/*
* PRE
*
* Workspace(luca.frosini) > RESTful Transaction Model.pdf
* https://data1-d.d4science.org/shub/E_YjI4STdKKzRlNjgzMm9jQWxjcmtReDNwbDFYR3lpTHo3SjdtN1RDZ3c2OGk0ZHZhdE5iZElBKzNxUDAyTGFqZw==
* https://goo.gl/HcUWni
*
*
* Workspace(luca.frosini) > RESTful Transaction Model v 1.0.pdf
* https://data1-d.d4science.org/shub/E_aThRa1NpWFJpTGEydEU2bEJhMXNjZy8wK3BxekJKYnpYTy81cUkwZVdicEZ0aGFRZmY4MkRnUC8xWW0zYzVoVg==
* https://goo.gl/J8AwQW
*
*
* Workspace(luca.frosini) > RESTful Transaction Model v 1.1.pdf
* https://data1-d.d4science.org/shub/E_NkhrbVV4VTluT0RKVUtCRldobFZTQU5ySTZneFdpUzJ2UjJBNlZWNDlURDVHamo4WjY5RnlrcHZGTGNkT2prUg==
* https://goo.gl/78ViuR
*
*/
@Test
public void testNameRegex() {
Map<String,Boolean> stringsToTest = new HashMap<>();
stringsToTest.put("Test", false); // Fails for T
stringsToTest.put("test-test+test-test", false); // Fails for +
stringsToTest.put("t", false); // Fails because is too short. Min length is 2 characters
stringsToTest.put("te", true);
stringsToTest.put("test-test_test-test", true);
stringsToTest.put(
"test-test_test-test_test-test_test-test_test-test_test-test_test-test_test-test_test-test_test-test_",
true);
// // Fails because is too long. Max length is 100 characters
stringsToTest.put(
"test-test_test-test_test-test_test-test_test-test_test-test_test-test_test-test_test-test_test-test_t",
false);
for(String testString : stringsToTest.keySet()) {
boolean match = testString.matches(CKANPackage.NAME_REGEX);
logger.debug("'{}' does {}match the regex {}", testString, match ? "" : "NOT ", CKANPackage.NAME_REGEX);
Assert.assertEquals(stringsToTest.get(testString), match);
}
}
protected CKANPackage createPackage(ObjectMapper mapper) throws Exception {
String currentContext = ContextUtility.getCurrentContext();
ScopeBean scopeBean = new ScopeBean(currentContext);
String ckanOrganizationName = CKANPackage.getOrganizationName(scopeBean);
ObjectNode itemObjectNode = mapper.createObjectNode();
itemObjectNode.put(CKAN.NAME_KEY, ITEM_NAME_VALUE);
itemObjectNode.put(CKANPackage.TITLE_KEY, "RESTful Transaction Model");
itemObjectNode.put(CKANPackage.LICENSE_KEY, LICENSE_VALUE);
itemObjectNode.put(PRIVATE_KEY, false);
itemObjectNode.put(NOTES_KEY, "A research of Luca Frosini");
itemObjectNode.put(URL_KEY, "http://www.d4science.org");
itemObjectNode.put(CKANPackage.OWNER_ORG_KEY, ckanOrganizationName);
ArrayNode tagArrayNode = itemObjectNode.putArray(CKANPackage.TAGS_KEY);
ObjectNode tagNode = mapper.createObjectNode();
tagNode.put(CKANPackage.NAME_KEY, "REST");
tagArrayNode.add(tagNode);
ArrayNode resourceArrayNode = itemObjectNode.putArray(CKANPackage.RESOURCES_KEY);
ObjectNode resourceNode = mapper.createObjectNode();
resourceNode.put(CKANResource.NAME_KEY, "RESTful Transaction Model");
// Workspace(luca.frosini) > RESTful Transaction Model v 1.0.pdf
resourceNode.put(CKANResource.URL_KEY, "https://goo.gl/J8AwQW");
resourceArrayNode.add(resourceNode);
ArrayNode extraArrayNode = itemObjectNode.putArray(CKANPackage.EXTRAS_KEY);
ObjectNode typeNode = mapper.createObjectNode();
typeNode.put(CKANPackage.EXTRAS_KEY_KEY, CKANPackage.EXTRAS_KEY_VALUE_SYSTEM_TYPE);
typeNode.put(CKANPackage.EXTRAS_VALUE_KEY, EXTRAS_TYPE_VALUE_VALUE);
extraArrayNode.add(typeNode);
ObjectNode modelNode = mapper.createObjectNode();
modelNode.put(CKANPackage.EXTRAS_KEY_KEY, "test");
modelNode.put(CKANPackage.EXTRAS_VALUE_KEY, "test 2.9°");
extraArrayNode.add(modelNode);
ObjectNode populationNode = mapper.createObjectNode();
populationNode.put(CKANPackage.EXTRAS_KEY_KEY, "Population");
populationNode.put(CKANPackage.EXTRAS_VALUE_KEY, "Italian");
extraArrayNode.add(populationNode);
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
//ckanPackage.setApiKey(CKANUtility.getSysAdminAPI());
String createdItem = ckanPackage.create(mapper.writeValueAsString(itemObjectNode));
logger.debug(createdItem);
return ckanPackage;
}
@Test
public void create() throws Exception {
ContextTest.setContextByName("/gcube/devNext/NextNext");
ObjectMapper mapper = new ObjectMapper();
createPackage(mapper);
}
@Test
public void testURIResolver() {
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName("Test");
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode objectNode = objectMapper.createObjectNode();
ckanPackage.addItemURLViaResolver(objectNode);
}
@Test
public void createReadUpdateUpdatePurge() throws Exception {
ContextTest.setContextByName("/gcube/devNext/NextNext");
ObjectMapper mapper = new ObjectMapper();
createPackage(mapper);
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
String readItem = ckanPackage.read();
JsonNode readItemObjectNode = mapper.readTree(readItem);
String readID = readItemObjectNode.get(CKANPackage.NAME_KEY).asText();
Assert.assertNotNull(readID);
Assert.assertTrue(ITEM_NAME_VALUE.compareTo(readID) == 0);
String updatedNotes = "A research of Luca Frosini made during the PhD";
((ObjectNode) readItemObjectNode).put(NOTES_KEY, updatedNotes);
ArrayNode resources = (ArrayNode) readItemObjectNode.get(CKANPackage.RESOURCES_KEY);
ObjectNode objectNode = (ObjectNode) resources.get(0);
// Workspace(luca.frosini) > RESTful Transaction Model v 1.1.pdf
objectNode.put(CKANResource.URL_KEY, "https://goo.gl/78ViuR");
resources.set(0, objectNode);
((ObjectNode) readItemObjectNode).replace(CKANPackage.RESOURCES_KEY, resources);
ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
String updatedItem = ckanPackage.update(mapper.writeValueAsString(readItemObjectNode));
logger.trace(updatedItem);
JsonNode updatedItemObjectNode = mapper.readTree(updatedItem);
String gotUpdatedNotes = updatedItemObjectNode.get(NOTES_KEY).asText();
Assert.assertTrue(gotUpdatedNotes.compareTo(updatedNotes) == 0);
ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
((ObjectNode) updatedItemObjectNode).remove(CKANPackage.RESOURCES_KEY);
String secondUpdateItem = ckanPackage.update(mapper.writeValueAsString(updatedItemObjectNode));
logger.trace(secondUpdateItem);
/*
ObjectNode patchObjectNode = mapper.createObjectNode();
String patchedNotes = updatedNotes + " in October 2018";
patchObjectNode.put(NOTES_KEY, patchedNotes);
patchObjectNode.put(CKANPackage.NAME_KEY, ITEM_NAME_VALUE);
ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
String patchedItem = ckanPackage.patch(mapper.writeValueAsString(patchObjectNode));
logger.trace(patchedItem);
JsonNode patchedItemObjectNode = mapper.readTree(patchedItem);
String gotPatchedNotes = patchedItemObjectNode.get(NOTES_KEY).asText();
Assert.assertTrue(gotPatchedNotes.compareTo(patchedNotes)==0);
*/
ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
ckanPackage.purge();
logger.debug("Item {} purge successfully", ITEM_NAME_VALUE);
}
@Test
//(expected = NotFoundException.class)
public void read() throws Exception {
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
String ret = ckanPackage.read();
logger.debug(ret);
}
@Test
//(expected = NotFoundException.class)
public void delete() throws Exception {
ContextTest.setContextByName("/gcube/devNext/NextNext");
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
ckanPackage.delete(true);
}
@Test
public void testUpdate() {
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName("knime_workflow_with_joined_consumer_phase_and_dose_response_model");
ckanPackage.update("{\"rating\":0.0,\"license_title\":\"Academic Free License 3.0\",\"maintainer\":\"\",\"relationships_as_object\":[],\"private\":false,\"maintainer_email\":\"\",\"num_tags\":5,\"id\":\"f4292d0e-c94f-4542-bfa3-25f78638fc1b\",\"metadata_created\":\"2020-01-07T16:40:16.987780\",\"owner_org\":\"3571cca5-b0ae-4dc6-b791-434a8e062ce5\",\"metadata_modified\":\"2020-02-03T14:24:59.221160\",\"author\":\"Buschhardt Tasja\",\"author_email\":\"tasja.buschhardt@bfr.bund.de\",\"state\":\"active\",\"version\":\"1\",\"license_id\":\"AFL-3.0\",\"type\":\"dataset\",\"resources\":[{\"cache_last_updated\":null,\"cache_url\":null,\"mimetype_inner\":null,\"hash\":\"\",\"description\":\"\",\"format\":\"knwf\",\"url\":\"https://data.d4science.net/g9QY\",\"created\":\"2019-09-16T20:49:02.168666\",\"state\":\"active\",\"package_id\":\"f4292d0e-c94f-4542-bfa3-25f78638fc1b\",\"last_modified\":null,\"mimetype\":null,\"url_type\":null,\"position\":0,\"revision_id\":\"a84a35ec-2786-4835-9f50-ad52202c4e33\",\"size\":null,\"datastore_active\":false,\"id\":\"0734b380-ea5d-4c99-be03-c38ff6ae6fbf\",\"resource_type\":null,\"name\":\"KNIME_WF_ICPMF11\"}],\"num_resources\":1,\"tags\":[{\"vocabulary_id\":null,\"state\":\"active\",\"display_name\":\"Campylobacter\",\"id\":\"84c76669-d135-4c5e-9e3a-b163689a10de\",\"name\":\"Campylobacter\"},{\"vocabulary_id\":null,\"state\":\"active\",\"display_name\":\"KNIME workflow\",\"id\":\"30bce4d2-fc45-46ab-8f8b-5da582fff3c3\",\"name\":\"KNIME workflow\"},{\"vocabulary_id\":null,\"state\":\"active\",\"display_name\":\"chicken meat\",\"id\":\"f1aac698-a865-4bf4-ac55-b53f8bf7ecac\",\"name\":\"chicken meat\"},{\"vocabulary_id\":null,\"state\":\"active\",\"display_name\":\"consumer phase model\",\"id\":\"9e6b2337-9ac0-4bfc-8e7f-4327c531bbec\",\"name\":\"consumer phase model\"},{\"vocabulary_id\":null,\"state\":\"active\",\"display_name\":\"dose response model\",\"id\":\"21311c09-a928-4a9a-83de-7ef98b257af5\",\"name\":\"dose response model\"}],\"groups\":[],\"creator_user_id\":\"7020f836-45f4-4ee8-9c65-e7504209644f\",\"relationships_as_subject\":[],\"name\":\"knime_workflow_with_joined_consumer_phase_and_dose_response_model\",\"isopen\":true,\"url\":\"\",\"notes\":\"This KNIME workflow shows how to use FSK-Lab to read, customise, run, \\r\\ncombine and change simulation settings for food safety models- specifically \\r\\nthis workflow exemplifies a joined consumer phase model for Campylobacter \\r\\nin chicken meat and a dose response model for Campylobacter\",\"title\":\"KNIME workflow with joined consumer phase and dose response model\",\"extras\":[{\"value\":\"\",\"key\":\"Author\"},{\"value\":\"http://data.d4science.org/ctlg/RAKIP_trial/knime_workflow_with_joined_consumer_phase_and_dose_response_model\",\"key\":\"Item URL\"},{\"value\":\"ResearchObject\",\"key\":\"system:type\"},{\"value\":\"{\\\"relatedIdentifierType\\\":\\\"URL\\\",\\\"relationType\\\":\\\"isReferencedBy\\\",\\\"link\\\":\\\"https://doi.org/10.5072/zenodo.488235\\\",\\\"zenodoId\\\":488235}\",\"key\":\"relatedIdentifier:Zenodo.DOI\"}],\"license_url\":\"http://www.opensource.org/licenses/AFL-3.0\",\"ratings_count\":0,\"organization\":{\"description\":\"\",\"title\":\"devVRE\",\"created\":\"2016-05-30T11:30:41.710079\",\"approval_status\":\"approved\",\"is_organization\":true,\"state\":\"active\",\"image_url\":\"\",\"revision_id\":\"7c8463df-ed3f-4d33-87d8-6c0bcbe30d5d\",\"type\":\"organization\",\"id\":\"3571cca5-b0ae-4dc6-b791-434a8e062ce5\",\"name\":\"devvre\"},\"revision_id\":\"9f51fa28-0732-46c9-a208-9a0e6da0cd2c\"}");
}
@Test
public void testUpdate2() {
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName("vre_picture");
ckanPackage.update("{\"rating\": 0.0, \"license_title\": \"Academic Free License 3.0\", \"maintainer\": \"Kerekes Kata\", \"relationships_as_object\": [], \"private\": false, \"maintainer_email\": \"kerekeska@nebih.gov.hu\", \"num_tags\": 1, \"id\": \"7731b70f-47ff-4b74-b943-188215e82d07\", \"metadata_created\": \"2020-01-07T16:40:24.822719\", \"owner_org\": \"3571cca5-b0ae-4dc6-b791-434a8e062ce5\", \"metadata_modified\": \"2020-02-03T15:16:42.596068\", \"author\": \"Kerekes Kata\", \"author_email\": \"kerekeska@nebih.gov.hu\", \"state\": \"active\", \"version\": \"1\", \"license_id\": \"AFL-3.0\", \"type\": \"dataset\", \"resources\": [{\"cache_last_updated\": null, \"cache_url\": null, \"mimetype_inner\": null, \"hash\": \"\", \"description\": \"\", \"format\": \"JPEG\", \"url\": \"https://goo.gl/SnwAM7\", \"created\": \"2019-04-01T13:24:40.738838\", \"state\": \"active\", \"package_id\": \"7731b70f-47ff-4b74-b943-188215e82d07\", \"last_modified\": null, \"mimetype\": \"image/jpeg\", \"url_type\": null, \"position\": 0, \"revision_id\": \"06d61000-a0c1-4155-ad2d-78ede56d6bb5\", \"size\": null, \"datastore_active\": false, \"id\": \"1de8851d-1385-47ae-9c93-6040d170a9cc\", \"resource_type\": null, \"name\": \"th.jpeg\"}], \"num_resources\": 1, \"tags\": [{\"vocabulary_id\": null, \"state\": \"active\", \"display_name\": \"DEMETER\", \"id\": \"4e05058b-a006-4dbf-94f5-277a30318323\", \"name\": \"DEMETER\"}], \"groups\": [], \"creator_user_id\": \"7020f836-45f4-4ee8-9c65-e7504209644f\", \"relationships_as_subject\": [], \"name\": \"vre_picture\", \"isopen\": true, \"url\": \"\", \"notes\": \"This is a nice picture of a VRE ;)\", \"title\": \"VRE picture\", \"extras\": [{\"value\": \"http://data.d4science.org/ctlg/DEMETER_trial/vre_picture\", \"key\": \"Item URL\"}, {\"value\": \"ResearchObject\", \"key\": \"system:type\"}], \"license_url\": \"http://www.opensource.org/licenses/AFL-3.0\", \"ratings_count\": 0, \"organization\": {\"description\": \"\", \"title\": \"devVRE\", \"created\": \"2016-05-30T11:30:41.710079\", \"approval_status\": \"approved\", \"is_organization\": true, \"state\": \"active\", \"image_url\": \"\", \"revision_id\": \"7c8463df-ed3f-4d33-87d8-6c0bcbe30d5d\", \"type\": \"organization\", \"id\": \"3571cca5-b0ae-4dc6-b791-434a8e062ce5\", \"name\": \"devvre\"}, \"revision_id\": \"bdb6169a-6268-43d6-b7e1-265c0c9e1a1c\"}");
}
/*
@Test
public void purgeAll() throws Exception {
//ContextTest.setContextByName("/d4science.research-infrastructures.eu/FARM/GRSF_Pre");
logger.debug("Going to purge all records");
CKANPackage ckanPackage = new CKANPackage();
ObjectMapper mapper = new ObjectMapper();
boolean go = true;
while(go) {
String ret = ckanPackage.list(10, 0);
JsonNode gotList = mapper.readTree(ret);
Assert.assertTrue(gotList instanceof ArrayNode);
ArrayNode itemsArray = (ArrayNode) gotList;
if(itemsArray.size()>0) {
for(JsonNode jsonNode : itemsArray) {
String name = jsonNode.asText();
logger.debug("Going to purge record with name {}", name);
ckanPackage.setName(name);
// ckanPackage.delete(true);
if(go) {
break;
}
Thread.sleep(500);
}
}else {
go=false;
}
}
}
*/
}