diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2ZenodoImpl.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2ZenodoImpl.java index 448d2f4..92e1179 100644 --- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2ZenodoImpl.java +++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2ZenodoImpl.java @@ -19,12 +19,22 @@ import org.gcube.data.publishing.ckan2zenodo.model.faults.TransformationExceptio import org.gcube.data.publishing.ckan2zenodo.model.faults.ZenodoException; import org.gcube.data.publishing.ckan2zenodo.model.zenodo.ZenodoDeposition; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; @Slf4j public class Ckan2ZenodoImpl implements Ckan2Zenodo{ + + private Zenodo z=null; + + private synchronized Zenodo getZenodo() throws ConfigurationException { + if(z==null) + z=Zenodo.get(); + return z; + } + @Override public CkanItemDescriptor read(String itemName) throws GcatException { try{ @@ -40,7 +50,7 @@ public class Ckan2ZenodoImpl implements Ckan2Zenodo{ ZenodoDeposition toUpdate=null; CkanRelatedIdentifier doi=desc.getZenodoDoi(); if(doi!=null) { - Zenodo z=Zenodo.get(); + Zenodo z=getZenodo(); toUpdate=z.readDeposition(doi.getZenodoId()); } Translator tr=new TransformerManager().getByProfile(desc.getProfile()); @@ -49,17 +59,17 @@ public class Ckan2ZenodoImpl implements Ckan2Zenodo{ @Override public ZenodoDeposition updatedMetadata(ZenodoDeposition toUpdate) throws ZenodoException, ConfigurationException { - Zenodo z=Zenodo.get(); + Zenodo z=getZenodo(); //initialize if not created if(toUpdate.getSubmitted()==null) { ZenodoDeposition created=z.createNew(); created.setMetadata(toUpdate.getMetadata()); toUpdate=created; } - if(toUpdate.getSubmitted()) - Zenodo.get().unlockPublished(toUpdate.getId()); + if(toUpdate.getSubmitted()&&toUpdate.getState().equals("done")) + z.unlockPublished(toUpdate.getId()); - return Zenodo.get().updateMetadata(toUpdate); + return z.updateMetadata(toUpdate); } @Override @@ -70,10 +80,10 @@ public class Ckan2ZenodoImpl implements Ckan2Zenodo{ @Override public Future uploadFiles(Set toUpload, ZenodoDeposition deposition) throws ZenodoException, ConfigurationException { - final Zenodo z=Zenodo.get(); + final Zenodo z=getZenodo(); - if(deposition.getSubmitted()) - Zenodo.get().unlockPublished(deposition.getId()); + if(deposition.getSubmitted()&&deposition.getState().equals("done")) + z.unlockPublished(deposition.getId()); Callable call=new Callable() { @Override @@ -94,40 +104,20 @@ public class Ckan2ZenodoImpl implements Ckan2Zenodo{ } @Override - public ZenodoDeposition publish(ZenodoDeposition dep, CkanItemDescriptor toUpdate) throws ZenodoException, ConfigurationException, InvalidItemException, MalformedURLException { - if(dep.getSubmitted()) - Zenodo.get().unlockPublished(dep.getId()); + public ZenodoDeposition publish(ZenodoDeposition dep, CkanItemDescriptor toUpdate) throws ZenodoException, ConfigurationException, InvalidItemException, MalformedURLException { + Zenodo z=getZenodo(); + if(dep.getSubmitted()&&dep.getState().equals("done")) + z.unlockPublished(dep.getId()); // Publishing to zenodo - ZenodoDeposition toReturn =Zenodo.get().publish(dep); + ZenodoDeposition toReturn =z.publish(dep); // Updateing item if(toUpdate.getZenodoDoi()==null) { - toUpdate.setZenodoDoi(CkanRelatedIdentifier.getZenodo(toReturn.getDoi())); + toUpdate.setZenodoDoi(CkanRelatedIdentifier.getZenodo(toReturn.getDOIUrl())); GCat.updateItem(toUpdate); } return toReturn; } -// public static void preview(String itemName) throws MalformedURLException { -// // looking for gcat.. -// GCat gCat=new GCat(); -// // looking for item -// CkanItemDescriptor desc=gCat.getByID(itemName); -// -// //transforming -//// ZenodoDeposition deposition=TransformerManager.transform(desc); -// -// // publishing / update to zenodo -// Zenodo z=new Zenodo(getZenodoToken()); -// -// -// } -// -// private static final ZenodoCredentials getZenodoToken() { -// throw new RuntimeException(); -// } - - - } diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/Translator.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/Translator.java index 189ed83..45e583a 100644 --- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/Translator.java +++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/Translator.java @@ -1,6 +1,7 @@ package org.gcube.data.publishing.ckan2zenodo; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -131,7 +132,13 @@ public class Translator { break; } case jsonPath : { - sourceValues.addAll(sourceCtx.read(v.getValue())); + for(String s: ((Collection) sourceCtx.read(v.getValue()))){ + if(s!=null) { + s=s.trim(); + if(!s.isEmpty())sourceValues.add(s); + } + + } break; } } diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/CkanRelatedIdentifier.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/CkanRelatedIdentifier.java index d612468..a89ea53 100644 --- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/CkanRelatedIdentifier.java +++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/CkanRelatedIdentifier.java @@ -1,9 +1,9 @@ package org.gcube.data.publishing.ckan2zenodo.model; +import java.net.URL; + import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; import lombok.ToString; @Getter @@ -12,8 +12,8 @@ import lombok.ToString; @ToString public class CkanRelatedIdentifier { - public static CkanRelatedIdentifier getZenodo(String doi) { - return new CkanRelatedIdentifier("URL", "isReferencedBy", doi); + public static CkanRelatedIdentifier getZenodo(URL doi) { + return new CkanRelatedIdentifier("URL", "isReferencedBy", doi.toString()); } // @NonNull diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/zenodo/ZenodoDeposition.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/zenodo/ZenodoDeposition.java index 82a3a92..5cc5c95 100644 --- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/zenodo/ZenodoDeposition.java +++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/zenodo/ZenodoDeposition.java @@ -1,5 +1,6 @@ package org.gcube.data.publishing.ckan2zenodo.model.zenodo; +import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Date; @@ -14,6 +15,7 @@ public class ZenodoDeposition { @JsonFormat(pattern = Commons.ISO_DATE_PATTERN) private Date created; private String doi; + private DepositionLinks links; private ArrayList files; private Integer id; private DepositionMetadata metadata; @@ -26,5 +28,11 @@ public class ZenodoDeposition { private Boolean submitted; private String title; - + public URL getDOIUrl() throws MalformedURLException { + try { + return new URL(links.getConceptdoi()); + }catch(Throwable t) { + return new URL("https://doi.org/"+doi); + } + } } diff --git a/src/test/java/org/gcube/tests/GCatTests.java b/src/test/java/org/gcube/tests/GCatTests.java index c65dd22..0d71e73 100644 --- a/src/test/java/org/gcube/tests/GCatTests.java +++ b/src/test/java/org/gcube/tests/GCatTests.java @@ -2,10 +2,13 @@ package org.gcube.tests; import java.net.MalformedURLException; +import javax.ws.rs.WebApplicationException; + import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.data.publishing.ckan2zenodo.clients.GCat; import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor; import org.gcube.gcat.client.Item; +import org.gcube.gcat.client.Profile; import org.junit.Test; public class GCatTests { @@ -20,7 +23,13 @@ public class GCatTests { System.out.println(item.getProfile()); } - + @Test + public void listProfiles() throws WebApplicationException, MalformedURLException { + TokenSetter.set("/gcube/devsec"); + System.out.println(SecurityTokenProvider.instance.get()); + System.out.println("PROFILES : "); + System.out.println(new Profile().list()); + } @Test public void publishUpdate() throws MalformedURLException { diff --git a/src/test/java/org/gcube/tests/OneHitTest.java b/src/test/java/org/gcube/tests/OneHitTest.java index d8c684f..f10d313 100644 --- a/src/test/java/org/gcube/tests/OneHitTest.java +++ b/src/test/java/org/gcube/tests/OneHitTest.java @@ -21,7 +21,10 @@ public class OneHitTest { public static void main(String[] args) throws GcatException, InvalidItemException, ZenodoException, ConfigurationException, TransformationException, InterruptedException, ExecutionException, MalformedURLException { - TokenSetter.set("/gcube/devsec/devVRE"); + String scope="/gcube/devsec"; +// String scope="/pred4s/preprod/preVRE"; + TokenSetter.set(scope); + Ckan2Zenodo client=new Ckan2ZenodoImpl(); String toPublishItemName="rasff_vizualizationhu_gif"; diff --git a/src/test/java/org/gcube/tests/ZenodoTests.java b/src/test/java/org/gcube/tests/ZenodoTests.java index 9c17a01..a9c9493 100644 --- a/src/test/java/org/gcube/tests/ZenodoTests.java +++ b/src/test/java/org/gcube/tests/ZenodoTests.java @@ -116,7 +116,7 @@ public class ZenodoTests { } dep=z.publish(dep); - desc.setZenodoDoi(CkanRelatedIdentifier.getZenodo(dep.getDoi())); + desc.setZenodoDoi(CkanRelatedIdentifier.getZenodo(dep.getDOIUrl())); // Change title String fakeTitle="Dummy Title";