diff --git a/CHANGELOG.md b/CHANGELOG.md
index b3f09e9..1f18661 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
# Changelog for org.gcube.data.publishing.ckan2zenodo-library
+## [v1.0.1] 2021-04-7
+
+-Integration with gCat 2.0.0 [#20751](https://support.d4science.org/issues/20751)
+
## [v1.0.0] 2021-02-18
- Improved mapping language : target record
@@ -14,15 +18,15 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
## [v0.0.2] 2020-06-30
### Enhancements
-- Default Ckan2Zenodo translation to comply with mandatory Zenodo fields (https://support.d4science.org/issues/19489)
-- Ckan2Zenodo library to provide means to apply default translation only (https://support.d4science.org/issues/19490)
-- Support to "split" on source values (https://support.d4science.org/issues/19534)
-- Support to "append" to target elements (https://support.d4science.org/issues/19535)
-- Multiple Date Format parsing (https://support.d4science.org/issues/19540)
+- Default Ckan2Zenodo translation to comply with mandatory Zenodo fields [19489](https://support.d4science.org/issues/19489)
+- Ckan2Zenodo library to provide means to apply default translation only [19490](https://support.d4science.org/issues/19490)
+- Support to "split" on source values [19534](https://support.d4science.org/issues/19534)
+- Support to "append" to target elements [19534](https://support.d4science.org/issues/19535)
+- Multiple Date Format parsing [19540](https://support.d4science.org/issues/19540)
- Automatically set item URL if missing.
### Fixes
-- Default filter resource is applied in class Ckan2ZenodoImpl.java (https://support.d4science.org/issues/19528)
+- Default filter resource is applied in class Ckan2ZenodoImpl.java [19528](https://support.d4science.org/issues/19528)
- Fixed error message for missing profile.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 1ffa7f7..c234ef4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.gcube.data.publishing
ckan2zenodo-library
- 1.0.0
+ 1.0.1
CKAN 2 Zenodo Library
Library to publish d4science CKAN items into Zenodo
@@ -31,7 +31,7 @@
org.gcube.distribution
gcube-bom
- 2.0.0
+ 2.0.1
pom
import
@@ -39,19 +39,13 @@
-
-
-
-
-
-
-
- org.gcube.data-publishing
+
+ org.gcube.data-catalogue
gcat-client
- [1.0.0-SNAPSHOT,2.0.0)
+ [2.0.0-SNAPSHOT,3.0.0)
-
+
org.gcube.core
common-encryption
diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/CkanItemDescriptor.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/CkanItemDescriptor.java
index 340c5db..71f279e 100644
--- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/CkanItemDescriptor.java
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/CkanItemDescriptor.java
@@ -1,10 +1,12 @@
package org.gcube.data.publishing.ckan2zenodo.model;
+import java.io.IOException;
import java.util.List;
import org.gcube.data.publishing.ckan2zenodo.commons.Parsing;
import org.gcube.data.publishing.ckan2zenodo.model.faults.InvalidItemException;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
@@ -46,6 +48,11 @@ public class CkanItemDescriptor {
private static final String NAME="$.name";
private static final String ZENODO_DOI="$.extras[?(@.key=='relatedIdentifier:Zenodo.DOI')]";
private static final String ZENODO_DOI_VALUE="$.extras[?(@.key=='relatedIdentifier:Zenodo.DOI')].value";
+ private static final String ORGANIZATION="$.organization";
+ private static final String RESOURCES="$.resources";
+ private static final String RESOURCES_COUNT="$.num_resources";
+ private static final String ID="$.id";
+
@NonNull
@Getter
@@ -168,8 +175,41 @@ public class CkanItemDescriptor {
}
}
- public CkanItemDescriptor setItemUrl(String toSet) {
- getDocument().set(ITEM_URL,toSet);
+
+ public CkanResource getResources() throws JsonProcessingException, IOException{
+ return getDocument().read(RESOURCES,CkanResource.class);
+// ArrayList toReturn=new ArrayList<>();
+//
+// for(Object o: mapper.readerFor(CkanResource.class).readValues().readAll())
+// toReturn.add((CkanResource) o);
+// return toReturn;
+ }
+
+ public CkanItemDescriptor cleanResources() {
+ getDocument().set(RESOURCES,new Object[0]);
+ getDocument().set(RESOURCES_COUNT,0);
+ content=getDocument().jsonString();
return this;
}
+
+
+ public CkanItemDescriptor removeOrganization() {
+ getDocument().set(ORGANIZATION,null);
+ content=getDocument().jsonString();
+ return this;
+ }
+
+ public CkanItemDescriptor removeId() {
+ getDocument().set(ID,null);
+ content=getDocument().jsonString();
+ return this;
+ }
+
+ public CkanItemDescriptor setItemUrl(String toSet) {
+ getDocument().set(ITEM_URL,toSet);
+ content=getDocument().jsonString();
+ return this;
+ }
+
+
}
diff --git a/src/test/java/org/gcube/tests/OneHitTest.java b/src/test/java/org/gcube/tests/OneHitTest.java
index e3e04f5..c04e556 100644
--- a/src/test/java/org/gcube/tests/OneHitTest.java
+++ b/src/test/java/org/gcube/tests/OneHitTest.java
@@ -1,6 +1,7 @@
package org.gcube.tests;
import java.net.MalformedURLException;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutionException;
@@ -8,6 +9,7 @@ import java.util.concurrent.Future;
import org.gcube.data.publishing.ckan2zenodo.Ckan2Zenodo;
import org.gcube.data.publishing.ckan2zenodo.Ckan2ZenodoImpl;
+import org.gcube.data.publishing.ckan2zenodo.clients.GCat;
import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor;
import org.gcube.data.publishing.ckan2zenodo.model.CkanResource;
import org.gcube.data.publishing.ckan2zenodo.model.faults.ConfigurationException;
@@ -16,48 +18,118 @@ import org.gcube.data.publishing.ckan2zenodo.model.faults.InvalidItemException;
import org.gcube.data.publishing.ckan2zenodo.model.faults.TransformationException;
import org.gcube.data.publishing.ckan2zenodo.model.faults.ZenodoException;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.ZenodoDeposition;
+import org.gcube.gcat.client.Item;
public class OneHitTest {
-
+
public static void main(String[] args) throws GcatException, InvalidItemException, ZenodoException, ConfigurationException, TransformationException, InterruptedException, ExecutionException, MalformedURLException {
-// String scope="/gcube/devsec";
- String scope="/pred4s/preprod/preVRE";
- TokenSetter.set(scope);
-
- Ckan2Zenodo client=new Ckan2ZenodoImpl();
- String toPublishItemName="a_sample_deliverable_4_zenodo";
-
+ // String scope="/gcube/devsec";
+ // String scope="/pred4s/preprod/preVRE";
+ // String scope="/d4science.research-infrastructures.eu/D4OS/Blue-CloudLab";
+ // TokenSetter.set(scope);
+ //
+ //
+ // // String toPublishItemName="a_sample_deliverable_4_zenodo";
+ // String toPublishItemName="blue_cloud_demonstrator_users_handbook_v1";
+
// Get the item representation
+
+ // Import & TEST
+
+ String sourceContext="/d4science.research-infrastructures.eu/D4OS/Blue-CloudProject";
+ String targetContext="/pred4s/preprod/preVRE";
+
+ Boolean publish=true;
+ String[] items= {
+ "blue_cloud_demonstrator_users_handbook_v1"
+ };
+
+ // IMPORT
+ importItemsByProfile(sourceContext, targetContext, items).forEach((CkanItemDescriptor d)->{
+ try {
+ testFullCycle(targetContext, d.getName(), publish);
+ } catch (GcatException | InvalidItemException | ZenodoException | ConfigurationException
+ | TransformationException | InterruptedException | ExecutionException | MalformedURLException e) {
+ throw new RuntimeException(e);
+ }
+ });;
+
+// testFullCycle(sourceContext, items[0], false);
+
+ }
+
+
+
+ public static void testFullCycle(String context,String toPublishItemName, boolean publish) throws GcatException, InvalidItemException, ZenodoException, ConfigurationException, TransformationException, InterruptedException, ExecutionException, MalformedURLException {
+ TokenSetter.set(context);
+ Ckan2Zenodo client=new Ckan2ZenodoImpl();
CkanItemDescriptor item=client.read(toPublishItemName);
-
+
System.out.println("Item PROFILE is : "+item.getProfile());
//Get a preview of the deposition to be published
ZenodoDeposition preview=client.translate(item);
+ System.out.println("DEPOSITION SOULD BE "+preview);
//Filter resources according to VRE policies
List toFilter=client.filterResources(item);
-
+
//Eventually update values
preview.getMetadata().setAccess_conditions("Ask me");
+
+
//Actually publish to zenodo :
// Step 1 : metadata
-
- System.out.println("Create/update metadata..");
- preview=client.updatedMetadata(preview);
-
- System.out.println("Publish files..");
- //Step 2 : publish Resources
- Future future_Dep=client.uploadFiles(Collections.singleton(toFilter.get(0)), preview);
- preview=future_Dep.get();
-
- System.out.println("Publishing.. ");
- //Finalize
-
- System.out.println("DONE : "+client.publish(preview, item));
-
+ if(publish) {
+ System.out.println("!!!! PUBLISHING.. ");
+ //Finalize
+ try{
+ Thread.sleep(5000);
+ }catch(InterruptedException e) {}
+
+
+
+ System.out.println("Create/update metadata..");
+ preview=client.updatedMetadata(preview);
+
+ System.out.println("Publish files..");
+ //Step 2 : publish Resources
+ Future future_Dep=client.uploadFiles(Collections.singleton(toFilter.get(0)), preview);
+ preview=future_Dep.get();
+
+ System.out.println("DONE : "+client.publish(preview, item));
+ }
+ }
+
+
+ public static ArrayList importItemsByProfile(String sourceContext,String targetContext,String... items) throws MalformedURLException, GcatException {
+ System.out.println("Importing from "+sourceContext);
+ TokenSetter.set(sourceContext);
+ ArrayList toReturn=new ArrayList();
+ for(String s:items)
+ toReturn.add(GCat.getByID(s));
+
+ System.out.println("Pushing in "+targetContext);
+ TokenSetter.set(targetContext);
+
+
+ for(CkanItemDescriptor d:toReturn) {
+ try{
+ d.removeOrganization();
+ d.removeId();
+ // List res=
+ d.getResources();
+ d.cleanResources();
+
+
+ new Item().create(d.getContent());
+ }catch(Exception e) {
+ System.err.println("Cannot publish "+d.getContent());
+ e.printStackTrace(System.err);
+ GCat.updateItem(d);
+ }
+ }
+ return toReturn;
}
-
-
}
diff --git a/src/test/resources/blue_cloud_deliverable.xml b/src/test/resources/blue_cloud_deliverable.xml
index cd33b0b..e3ea0c4 100644
--- a/src/test/resources/blue_cloud_deliverable.xml
+++ b/src/test/resources/blue_cloud_deliverable.xml
@@ -24,43 +24,43 @@
upload_type
-
-
-
-
-
-
-
+
+
+ $.metadata.creators
+ name
+
-
-
-
-
-
-
-
-
+
+
+ $.metadata.contributors
+ name
+ type
+
-
-
-
-
-
-
-
+
+
+ $.metadata.grants
+ id
+
-
-
-
-
-
-
-
+
+
+ $.metadata.communities
+ identifier
+