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 - - - - - - - + + + $.extras[?(@.key=='Deliverable Author')].value + + $.metadata.creators + name + - - - - - - - - + + + $.extras[?(@.key=='Deliverable Contributor')].value + + $.metadata.contributors + name + type + - - - - - - - + + + 862409 + + $.metadata.grants + id + - - - - - - - + + + bluecloud + + $.metadata.communities + identifier +