diff --git a/pom.xml b/pom.xml
index c751ca0..96025e1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,7 +80,6 @@
ch.qos.logback
logback-classic
- 1.0.13
test
diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2Zenodo.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2Zenodo.java
index 953e8db..bd7d82a 100644
--- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2Zenodo.java
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2Zenodo.java
@@ -1,10 +1,16 @@
package org.gcube.data.publishing.ckan2zenodo;
+import java.util.List;
import java.util.Set;
import java.util.concurrent.Future;
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;
+import org.gcube.data.publishing.ckan2zenodo.model.faults.GcatException;
+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;
public interface Ckan2Zenodo {
@@ -24,32 +30,40 @@ public interface Ckan2Zenodo {
*
* @param itemName
* @return
+ * @throws GcatException
*/
- public CkanItemDescriptor read(String itemName);
+ public CkanItemDescriptor read(String itemName) throws GcatException;
/**
- * Translates @param desc into a ZenodoDeposition using mappings declared in current VRE
+ * Translates @param desc into a ZenodoDeposition using mappings declared in current VRE and previous existing Zenodo Deposition if any
*
* @param desc
* @return
+ * @throws InvalidItemException
+ * @throws ZenodoException
+ * @throws ConfigurationException
+ * @throws TransformationException
*/
- public ZenodoDeposition translate(CkanItemDescriptor desc);
+ public ZenodoDeposition translate(CkanItemDescriptor desc) throws InvalidItemException, ZenodoException, ConfigurationException, TransformationException;
/**
* Create / update metadata of @param toUpdate into the Zenodo instance declared in current VRE
*
* @param toUpdate
* @return
+ * @throws ZenodoException
*/
- public ZenodoDeposition updatedMetadata(ZenodoDeposition toUpdate);
+ public ZenodoDeposition updatedMetadata(ZenodoDeposition toUpdate) throws ZenodoException;
/**
* Filters ckan resources of @param desc by using mappings declared in current VRE
*
* @param desc
* @return
+ * @throws ConfigurationException
+ * @throws TransformationException
*/
- public CkanResource filterResources(CkanItemDescriptor desc);
+ public List filterResources(CkanItemDescriptor desc) throws ConfigurationException, TransformationException;
/**
* Uploads @param toUpload resources associating them to given @param deposition
@@ -57,8 +71,9 @@ public interface Ckan2Zenodo {
* @param toUpload
* @param deposition
* @return
+ * @throws ZenodoException
*/
- public Future uploadFiles(Set toUpload,ZenodoDeposition deposition);
+ public Future uploadFiles(Set toUpload,ZenodoDeposition deposition) throws ZenodoException;
/**
* Publishes @param dep, setting/updateing DOI reference into @param toUpdate
@@ -66,7 +81,8 @@ public interface Ckan2Zenodo {
* @param dep
* @param toUpdate
* @return
+ * @throws ZenodoException
*/
- public ZenodoDeposition publish(ZenodoDeposition dep, CkanItemDescriptor toUpdate);
+ public ZenodoDeposition publish(ZenodoDeposition dep, CkanItemDescriptor toUpdate) throws ZenodoException;
}
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 37dd821..720f535 100644
--- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2ZenodoImpl.java
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2ZenodoImpl.java
@@ -1,31 +1,119 @@
package org.gcube.data.publishing.ckan2zenodo;
-import java.net.MalformedURLException;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+import org.gcube.data.publishing.ckan2zenodo.clients.FileUploaderManager;
import org.gcube.data.publishing.ckan2zenodo.clients.GCat;
import org.gcube.data.publishing.ckan2zenodo.clients.Zenodo;
import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor;
-import org.gcube.data.publishing.ckan2zenodo.model.ZenodoCredentials;
+import org.gcube.data.publishing.ckan2zenodo.model.CkanRelatedIdentifier;
+import org.gcube.data.publishing.ckan2zenodo.model.CkanResource;
+import org.gcube.data.publishing.ckan2zenodo.model.faults.ConfigurationException;
+import org.gcube.data.publishing.ckan2zenodo.model.faults.GcatException;
+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;
-public class Ckan2ZenodoImpl {
+import lombok.extern.slf4j.Slf4j;
+
+
+@Slf4j
+public class Ckan2ZenodoImpl implements Ckan2Zenodo{
+
+ @Override
+ public CkanItemDescriptor read(String itemName) throws GcatException {
+ try{
+ return GCat.getByID(itemName);
+ }catch(Throwable e) {
+ log.warn("Unable to load "+itemName+" from gCat",e);
+ throw new GcatException("Unable to load item from gCat");
+ }
+ }
+
+ @Override
+ public ZenodoDeposition translate(CkanItemDescriptor desc) throws InvalidItemException, ZenodoException, ConfigurationException, TransformationException {
+ ZenodoDeposition toUpdate=null;
+ CkanRelatedIdentifier doi=desc.getZenodoDoi();
+ if(doi!=null) {
+ Zenodo z=Zenodo.get();
+ toUpdate=z.readDeposition(doi.getZenodoId());
+ }
+ Translator tr=new TransformerManager().getByProfile(desc.getProfile());
+ return tr.transform(desc, toUpdate);
+ }
+
+ @Override
+ public ZenodoDeposition updatedMetadata(ZenodoDeposition toUpdate) throws ZenodoException {
+ if(toUpdate.getSubmitted())
+ Zenodo.get().unlockPublished(toUpdate.getId());
+
+ return Zenodo.get().updateMetadata(toUpdate);
+ }
+
+ @Override
+ public List filterResources(CkanItemDescriptor desc) throws ConfigurationException, TransformationException {
+ Translator tr=new TransformerManager().getByProfile(desc.getProfile());
+ return tr.filterResources(desc);
+ }
+
+ @Override
+ public Future uploadFiles(Set toUpload, ZenodoDeposition deposition) throws ZenodoException {
+ final Zenodo z=Zenodo.get();
+
+ if(deposition.getSubmitted())
+ Zenodo.get().unlockPublished(deposition.getId());
+
+ Callable call=new Callable() {
+ @Override
+ public ZenodoDeposition call() throws Exception {
+ ZenodoDeposition dep=deposition;
+ for(CkanResource r:toUpload) {
+ try {
+ dep.getFiles().add(z.uploadFile(dep, r.getName(), r.getUrl()));
+ }catch(Throwable t) {
+ throw new Exception("Unable to upload "+r.getName()+".",t);
+ }
+ }
+ return z.readDeposition(dep.getId());
+ }
+ };
+
+ return FileUploaderManager.submitForDeposition(call);
+ }
+
+ @Override
+ public ZenodoDeposition publish(ZenodoDeposition dep, CkanItemDescriptor toUpdate) throws ZenodoException {
+ if(dep.getSubmitted())
+ Zenodo.get().unlockPublished(dep.getId());
+
+ return Zenodo.get().publish(dep);
+ }
- public static void publish(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());
-
-
- }
+// 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();
+// }
+
+
+
- private static final ZenodoCredentials getZenodoToken() {
- throw new RuntimeException();
- }
}
diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/TransformerManager.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/TransformerManager.java
index 16a9851..f735574 100644
--- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/TransformerManager.java
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/TransformerManager.java
@@ -6,6 +6,7 @@ import javax.xml.parsers.ParserConfigurationException;
import org.gcube.common.resources.gcore.GenericResource;
import org.gcube.data.publishing.ckan2zenodo.commons.IS;
+import org.gcube.data.publishing.ckan2zenodo.model.faults.ConfigurationException;
import lombok.Synchronized;
@@ -25,12 +26,12 @@ public class TransformerManager {
return builder;
}
- public Translator getByProfile(String profile) throws Exception {
+ public Translator getByProfile(String profile) throws ConfigurationException {
for(GenericResource r: IS.queryForGenericResources("Ckan-Zenodo-Mappings")){
if (r.profile().name().equals(profile))
return new Translator(IS.readMappings(r),IS.readResourceFilters(r));
}
- throw new Exception("No transformer found for profile "+profile);
+ throw new ConfigurationException("No transformer found for profile "+profile);
}
diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/clients/FileUploaderManager.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/clients/FileUploaderManager.java
index bb0391d..f006f50 100644
--- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/clients/FileUploaderManager.java
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/clients/FileUploaderManager.java
@@ -4,7 +4,6 @@ import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-import java.util.concurrent.FutureTask;
import javax.ws.rs.core.Response;
@@ -14,19 +13,22 @@ import org.gcube.data.publishing.ckan2zenodo.model.zenodo.ZenodoDeposition;
public class FileUploaderManager {
- static ExecutorService service=null;
+ static ExecutorService uploadService=null;
+ static ExecutorService requestService=null;
+
static {
- service=Executors.newFixedThreadPool(Integer.parseInt(LocalConfiguration.getProperty(Configuration.THREAD_POOL_SIZE)));
+ uploadService=Executors.newFixedThreadPool(Integer.parseInt(LocalConfiguration.getProperty(Configuration.THREAD_POOL_SIZE))*3);
+ requestService=Executors.newFixedThreadPool(Integer.parseInt(LocalConfiguration.getProperty(Configuration.THREAD_POOL_SIZE)));
}
- public FutureTask createTask(Callable call ){
- return new FutureTask (call);
+ public static Future submitForDeposition(Callable call ){
+ return requestService.submit(call);
}
- public static Future submit(Callable call){
- return service.submit(call);
+ public static Future submitForResponse(Callable call){
+ return uploadService.submit(call);
}
}
diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/clients/Zenodo.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/clients/Zenodo.java
index a2c1da4..00ebd3c 100644
--- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/clients/Zenodo.java
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/clients/Zenodo.java
@@ -45,6 +45,9 @@ public class Zenodo {
private static final String PUBLISH_URL_PRE="deposit/depositions";
private static final String PUBLISH_URL_POST="actions/publish";
+
+ private static final String UNLOCK_URL_PRE="deposit/depositions";
+ private static final String UNLOCK_URL_POST="actions/edit";
private static final String ACCESS_TOKEN="access_token";
@@ -58,6 +61,12 @@ public class Zenodo {
}
+ public static final Zenodo get() {
+ // READ FROM IS
+ throw new RuntimeException("IMPLEMENT THIS");
+ }
+
+
@NonNull
private ZenodoCredentials credentials;
@@ -72,9 +81,9 @@ public class Zenodo {
return client;
}
- public ZenodoDeposition readDeposition(String id) throws ZenodoException {
+ public ZenodoDeposition readDeposition(Integer id) throws ZenodoException {
Response resp= getWebClient().target(credentials.getBaseUrl()).
- path(DEPOSITION_BASE_URL).path(id).
+ path(DEPOSITION_BASE_URL).path(id+"").
queryParam(ACCESS_TOKEN, credentials.getKey()).request(CONTENT_TYPE)
.get();
return check(resp,ZenodoDeposition.class);
@@ -95,7 +104,7 @@ public class Zenodo {
}
}
- public ZenodoDeposition updateMetadata(ZenodoDeposition dep) throws ZenodoException, JsonProcessingException {
+ public ZenodoDeposition updateMetadata(ZenodoDeposition dep) throws ZenodoException {
return updateMetadata(dep.getId(), dep.getMetadata());
}
@@ -141,7 +150,7 @@ public class Zenodo {
log.debug("Submitting request to upload "+urlString+" to Manager");
- Future resp=FileUploaderManager.submit(call);
+ Future resp=FileUploaderManager.submitForResponse(call);
try {
return check(resp.get(),FileDeposition.class);
@@ -155,8 +164,9 @@ public class Zenodo {
}
- private ZenodoDeposition updateMetadata(Integer depositionId,DepositionMetadata meta) throws ZenodoException, JsonProcessingException {
- String serialized="{\"metadata\":"+Fixer.fixIncoming(mapper.writeValueAsString(meta))+"}";
+ private ZenodoDeposition updateMetadata(Integer depositionId,DepositionMetadata meta) throws ZenodoException {
+ try{
+ String serialized="{\"metadata\":"+Fixer.fixIncoming(mapper.writeValueAsString(meta))+"}";
try {
Response resp = getWebClient().target(credentials.getBaseUrl()).
path(DEPOSITION_BASE_URL).path(depositionId+"").
@@ -167,8 +177,22 @@ public class Zenodo {
log.debug("Error while tryin to update "+serialized);
throw t;
}
+ }catch(JsonProcessingException e) {
+ log.debug("Error while parsing "+meta,e);
+ throw new ZenodoException("Internal error.",e);
+ }
}
+ public ZenodoDeposition unlockPublished(Integer depositionId) throws ZenodoException {
+ Response resp = getWebClient().target(credentials.getBaseUrl()).
+ path(UNLOCK_URL_PRE).
+ path(depositionId+"").
+ path(UNLOCK_URL_POST).
+ queryParam(ACCESS_TOKEN, credentials.getKey()).request(CONTENT_TYPE)
+ .post(Entity.json("{}"));
+ return check(resp,ZenodoDeposition.class);
+ }
+
public void deleteDeposition(Integer depositionId) throws ZenodoException {
Response resp = getWebClient().target(credentials.getBaseUrl()).
path(DEPOSITION_BASE_URL).path(depositionId+"").
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 19e600d..19344c9 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
@@ -2,18 +2,30 @@ package org.gcube.data.publishing.ckan2zenodo.model;
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.databind.ObjectMapper;
+import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
-import com.jayway.jsonpath.ReadContext;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
+import net.minidev.json.JSONObject;
@RequiredArgsConstructor
@NoArgsConstructor
public class CkanItemDescriptor {
+ static private ObjectMapper mapper;
+
+ static {
+ mapper=Parsing.getMapper();
+ }
+
+
private static final String PROFILE="$.extras[?(@.key=='system:type')].value";
private static final String TITLE="$.title";
private static final String NOTES="$.notes";
@@ -30,6 +42,8 @@ public class CkanItemDescriptor {
private static final String MAINTAINER="$.maintainer";
private static final String ITEM_URL="$.extras[?(@.key=='Item URL')].value";
private static final String NAME="$.name";
+ private static final String ZENODO_DOI="$.extras[?(@.key=='relatedIdentifier:Zenodo.DOI')].value";
+
@NonNull
@Getter
@@ -37,10 +51,10 @@ public class CkanItemDescriptor {
@Getter(lazy=true)
- private final ReadContext document=document();
+ private final DocumentContext document=document();
- private ReadContext document() {
+ private DocumentContext document() {
return JsonPath.parse(content);
}
@@ -112,4 +126,38 @@ public class CkanItemDescriptor {
if(values==null) return null;
return values.get(0);
}
+
+ private String readRelatedIdentifierString() throws InvalidItemException {
+ List values=getDocument().read(ZENODO_DOI);
+ if(values==null || values.isEmpty()) return null;
+ if(values.size()>1) throw new InvalidItemException("Multiple Zenodo Doi found on item.");
+ return values.get(0);
+ }
+
+ public CkanRelatedIdentifier getZenodoDoi() throws InvalidItemException {
+ try{
+ String s=readRelatedIdentifierString();
+ if(s==null) return null;
+ return mapper.readValue(s, CkanRelatedIdentifier.class);
+ }catch(InvalidItemException e) {
+ throw e;
+ }catch(Throwable t) {
+ throw new InvalidItemException("Unable to parse item ",t);
+ }
+ }
+
+ public CkanItemDescriptor setZenodoDoi(CkanRelatedIdentifier toSet) throws InvalidItemException {
+ if(readRelatedIdentifierString()!=null) throw new InvalidItemException("Item already contains Zenodo DOI");
+ try{
+ String serialized=mapper.writeValueAsString(toSet);
+ JSONObject obj=new JSONObject();
+ obj.put("key", "relatedIdentifier:Zenodo.DOI");
+ obj.put("value", serialized);
+ getDocument().add("$.extras",obj);
+ content=getDocument().jsonString();
+ return this;
+ }catch(Throwable t) {
+ throw new InvalidItemException("Unable to parse item ",t);
+ }
+ }
}
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
new file mode 100644
index 0000000..0dc12f2
--- /dev/null
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/CkanRelatedIdentifier.java
@@ -0,0 +1,29 @@
+package org.gcube.data.publishing.ckan2zenodo.model;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.ToString;
+
+@Getter
+@RequiredArgsConstructor
+@NoArgsConstructor
+@ToString
+public class CkanRelatedIdentifier {
+
+ public static CkanRelatedIdentifier getZenodo(String doi) {
+ return new CkanRelatedIdentifier("URL", "isReferencedBy", doi);
+ }
+
+ @NonNull
+ private String relatedIdentifierType;
+ @NonNull
+ private String relationType;
+ @NonNull
+ private String link;
+
+ public Integer getZenodoId() {
+ return Integer.parseInt(link.substring(link.lastIndexOf(".")+1));
+ }
+}
diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/faults/GcatException.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/faults/GcatException.java
new file mode 100644
index 0000000..403ee8b
--- /dev/null
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/faults/GcatException.java
@@ -0,0 +1,32 @@
+package org.gcube.data.publishing.ckan2zenodo.model.faults;
+
+public class GcatException extends Exception {
+
+ public GcatException() {
+ super();
+ // TODO Auto-generated constructor stub
+ }
+
+ public GcatException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
+ super(arg0, arg1, arg2, arg3);
+ // TODO Auto-generated constructor stub
+ }
+
+ public GcatException(String arg0, Throwable arg1) {
+ super(arg0, arg1);
+ // TODO Auto-generated constructor stub
+ }
+
+ public GcatException(String arg0) {
+ super(arg0);
+ // TODO Auto-generated constructor stub
+ }
+
+ public GcatException(Throwable arg0) {
+ super(arg0);
+ // TODO Auto-generated constructor stub
+ }
+
+
+
+}
diff --git a/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/faults/InvalidItemException.java b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/faults/InvalidItemException.java
new file mode 100644
index 0000000..ebfb4be
--- /dev/null
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/model/faults/InvalidItemException.java
@@ -0,0 +1,34 @@
+package org.gcube.data.publishing.ckan2zenodo.model.faults;
+
+public class InvalidItemException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 956698656847887456L;
+
+ public InvalidItemException() {
+ // TODO Auto-generated constructor stub
+ }
+
+ public InvalidItemException(String arg0) {
+ super(arg0);
+ // TODO Auto-generated constructor stub
+ }
+
+ public InvalidItemException(Throwable arg0) {
+ super(arg0);
+ // TODO Auto-generated constructor stub
+ }
+
+ public InvalidItemException(String arg0, Throwable arg1) {
+ super(arg0, arg1);
+ // TODO Auto-generated constructor stub
+ }
+
+ public InvalidItemException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
+ super(arg0, arg1, arg2, arg3);
+ // TODO Auto-generated constructor stub
+ }
+
+}
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 5244d4c..82a3a92 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
@@ -26,4 +26,5 @@ public class ZenodoDeposition {
private Boolean submitted;
private String title;
+
}
diff --git a/src/test/java/org/gcube/tests/OneHitTest.java b/src/test/java/org/gcube/tests/OneHitTest.java
new file mode 100644
index 0000000..c82e398
--- /dev/null
+++ b/src/test/java/org/gcube/tests/OneHitTest.java
@@ -0,0 +1,55 @@
+package org.gcube.tests;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+import org.gcube.data.publishing.ckan2zenodo.Ckan2Zenodo;
+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;
+import org.gcube.data.publishing.ckan2zenodo.model.faults.GcatException;
+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;
+
+public class OneHitTest {
+
+
+ public static void main(String[] args) throws GcatException, InvalidItemException, ZenodoException, ConfigurationException, TransformationException, InterruptedException, ExecutionException {
+ TokenSetter.set("/pred4s/preprod/preVRE");
+ Ckan2Zenodo client=Ckan2Zenodo.get();
+ String toPublishItemName="my_item";
+
+ // Get the item representation
+ CkanItemDescriptor item=client.read(toPublishItemName);
+
+ //Get a preview of the deposition to be published
+ ZenodoDeposition preview=client.translate(item);
+
+ //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
+
+ preview=client.updatedMetadata(preview);
+
+ //Step 2 : publish Resources
+ Future future_Dep=client.uploadFiles(Collections.singleton(toFilter.get(0)), preview);
+ preview=future_Dep.get();
+
+ //Finalize
+
+ client.publish(preview, item);
+
+ }
+
+
+}
diff --git a/src/test/java/org/gcube/tests/ParsingTests.java b/src/test/java/org/gcube/tests/ParsingTests.java
index 7a9efc7..a672ffd 100644
--- a/src/test/java/org/gcube/tests/ParsingTests.java
+++ b/src/test/java/org/gcube/tests/ParsingTests.java
@@ -9,8 +9,12 @@ import java.util.List;
import org.gcube.data.publishing.ckan2zenodo.Fixer;
import org.gcube.data.publishing.ckan2zenodo.commons.Parsing;
+import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor;
+import org.gcube.data.publishing.ckan2zenodo.model.CkanRelatedIdentifier;
import org.gcube.data.publishing.ckan2zenodo.model.faults.ConfigurationException;
+import org.gcube.data.publishing.ckan2zenodo.model.faults.InvalidItemException;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata;
+import org.gcube.data.publishing.ckan2zenodo.model.zenodo.RelatedIdentifier;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.ZenodoDeposition;
import org.junit.Assert;
import org.junit.BeforeClass;
@@ -131,4 +135,16 @@ public class ParsingTests {
System.out.println(s);
}
}
+
+
+ @Test
+ public void addDOI() throws InvalidItemException {
+ String json=TestCommons.convertStreamToString(TransformationTests.class.getResourceAsStream("/ResearchObject.json"));
+ CkanItemDescriptor desc=new CkanItemDescriptor(json);
+ Assert.assertNull(desc.getZenodoDoi());
+ desc.setZenodoDoi(new CkanRelatedIdentifier("URL", "isReferencedBy", "http://some.dumb.link.com"));
+ CkanRelatedIdentifier id=desc.getZenodoDoi();
+ Assert.assertNotNull(id);
+ System.out.println(desc.getContent());
+ }
}
diff --git a/src/test/java/org/gcube/tests/ZenodoTests.java b/src/test/java/org/gcube/tests/ZenodoTests.java
index 2d5a3b7..9c17a01 100644
--- a/src/test/java/org/gcube/tests/ZenodoTests.java
+++ b/src/test/java/org/gcube/tests/ZenodoTests.java
@@ -10,6 +10,7 @@ import org.gcube.data.publishing.ckan2zenodo.Translator;
import org.gcube.data.publishing.ckan2zenodo.clients.Zenodo;
import org.gcube.data.publishing.ckan2zenodo.commons.IS;
import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor;
+import org.gcube.data.publishing.ckan2zenodo.model.CkanRelatedIdentifier;
import org.gcube.data.publishing.ckan2zenodo.model.CkanResource;
import org.gcube.data.publishing.ckan2zenodo.model.ZenodoCredentials;
import org.gcube.data.publishing.ckan2zenodo.model.faults.ConfigurationException;
@@ -20,10 +21,13 @@ import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata.Acc
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata.UploadType;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.FileDeposition;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.ZenodoDeposition;
+import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.jayway.jsonpath.JsonPath;
+
public class ZenodoTests {
@@ -43,7 +47,7 @@ public class ZenodoTests {
Zenodo z=new Zenodo(credentials);
- System.out.println(z.readDeposition("426312"));
+ System.out.println(z.readDeposition(426312));
}
@@ -89,4 +93,48 @@ public class ZenodoTests {
System.out.println();
}
+
+ @Test
+ public void updateExisting() throws ConfigurationException, Exception {
+ // publish new
+ Zenodo z=new Zenodo(credentials);
+
+ GenericResource res=Resources.unmarshal(GenericResource.class, TransformationTests.class.getResourceAsStream("/ResearchObject.xml"));
+ ZenodoDeposition dep=z.createNew();
+ Translator tran=new Translator(IS.readMappings(res),IS.readResourceFilters(res));
+ dep=TestCommons.readAndTransform("/ResearchObject.json", tran,dep);
+ dep=z.updateMetadata(dep);
+
+ System.out.println("Resulting Deposition with metadata : ");
+ System.out.println();
+ String json=TestCommons.convertStreamToString(TransformationTests.class.getResourceAsStream("/ResearchObject.json"));
+ CkanItemDescriptor desc=new CkanItemDescriptor(json);
+
+ for(CkanResource cRes:tran.filterResources(desc)) {
+ FileDeposition file=z.uploadFile(dep, cRes.getName(), cRes.getUrl());
+ System.out.println("Published "+file);
+ }
+ dep=z.publish(dep);
+
+ desc.setZenodoDoi(CkanRelatedIdentifier.getZenodo(dep.getDoi()));
+
+ // Change title
+ String fakeTitle="Dummy Title";
+
+ String modifiedJson=JsonPath.parse(desc.getContent()).put("$", "title", fakeTitle).jsonString();
+ desc=new CkanItemDescriptor(modifiedJson);
+ // Publish logic :
+
+ Assert.assertNotNull(desc);
+ Assert.assertNotNull(desc.getZenodoDoi());
+ Assert.assertEquals(fakeTitle, desc.getTitle());
+
+ dep=z.readDeposition(desc.getZenodoDoi().getZenodoId());
+ dep=tran.transform(desc, dep);
+ z.unlockPublished(dep.getId());
+ System.out.println(z.updateMetadata(dep));
+ dep=z.publish(dep);
+ Assert.assertEquals(fakeTitle, dep.getTitle());
+ System.out.println(dep);
+ }
}