diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1bc3e8f..993c568 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,15 @@
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
# Changelog for org.gcube.data.publishing.ckan2zenodo-library
+## [v0.0.4] 2021-02-18
+- Improved mapping language : target record
+- Improved mapping language : value iteration
+
+
+## [v0.0.3-SNAPSHOT] 2020-06-30
+- Changed coordinartes for gcat-client
+
+
## [v0.0.2] 2020-06-30
### Enhancements
diff --git a/out.json b/out.json
new file mode 100644
index 0000000..27c5b6c
--- /dev/null
+++ b/out.json
@@ -0,0 +1 @@
+{"metadata":{"upload_type":"other","publication_date":"2021-03-08T16:30:21.000774+0000","title":"A sample deliverable 4 Zenodo","creators":[{"name":"Candela Leonardo"},{"name":"Candela Leonardo"}],"description":"This is a sample deliverable created for testing the publish2Zenodo \r\nfacility","access_right":"open","license":"CC-BY-SA-4.0","keywords":["Text mining"],"related_identifiers":[{"identifier":"https://data-pre.d4science.org/ctlg/preVRE/a_sample_deliverable_4_zenodo","relation":"isCompiledBy"}],"contributors":[{"name":"Candela Leonardo","type":"Producer"},{"name":"Candela Leonardo","type":"DataCurator"},{"name":"D4Science","type":"HostingInstitution"}],"version":"1"},"doiurl":"https://doi.org/null"}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 3bbeaad..88309f5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.gcube.data.publishing
ckan2zenodo-library
- 0.0.2
+ 0.0.4
CKAN 2 Zenodo Library
Library to publish d4science CKAN items into Zenodo
@@ -31,7 +31,7 @@
org.gcube.distribution
gcube-bom
- 1.5.0
+ 2.0.0
pom
import
@@ -39,18 +39,19 @@
-
+
+
+
+
+
+
+
org.gcube.data-publishing
gcat-client
- [1.2.0,2.0.0-SNAPSHOT)
-
-
- com.fasterxml.jackson.core
- jackson-core
-
-
+ [1.0.0-SNAPSHOT,2.0.0)
+
org.gcube.core
common-encryption
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 8bd2de6..67caf97 100644
--- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2Zenodo.java
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2Zenodo.java
@@ -96,4 +96,14 @@ public interface Ckan2Zenodo {
*/
public ZenodoDeposition publish(ZenodoDeposition dep, CkanItemDescriptor toUpdate) throws ZenodoException, ConfigurationException, InvalidItemException, MalformedURLException;
+
+ /**
+ * Checks environment configuration
+ *
+ * -gCat is present
+ * -Zenodo credentials are present
+ *
+ *
+ *
+ */
}
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 487d5f3..9daeeee 100644
--- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/TransformerManager.java
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/TransformerManager.java
@@ -29,7 +29,7 @@ public class TransformerManager {
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));
+ return new Translator(IS.readMappings(r));
}
throw new ConfigurationException("No specific mapping for the catalogue item has been configured. "
+ "By continuing with the upload some metadata might not be upload to Zenodo.");
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 8e703a6..9b503c2 100644
--- a/src/main/java/org/gcube/data/publishing/ckan2zenodo/Translator.java
+++ b/src/main/java/org/gcube/data/publishing/ckan2zenodo/Translator.java
@@ -5,9 +5,11 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -15,11 +17,13 @@ import org.gcube.data.publishing.ckan2zenodo.commons.Parsing;
import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor;
import org.gcube.data.publishing.ckan2zenodo.model.CkanResource;
import org.gcube.data.publishing.ckan2zenodo.model.faults.TransformationException;
+import org.gcube.data.publishing.ckan2zenodo.model.parsing.Filter;
import org.gcube.data.publishing.ckan2zenodo.model.parsing.Mapping;
-import org.gcube.data.publishing.ckan2zenodo.model.parsing.Mapping.Regexp;
-import org.gcube.data.publishing.ckan2zenodo.model.parsing.Mapping.Source.Value;
+import org.gcube.data.publishing.ckan2zenodo.model.parsing.Mappings;
+import org.gcube.data.publishing.ckan2zenodo.model.parsing.Regexp;
import org.gcube.data.publishing.ckan2zenodo.model.parsing.ResourceFilter;
-import org.gcube.data.publishing.ckan2zenodo.model.parsing.ResourceFilter.Filter;
+import org.gcube.data.publishing.ckan2zenodo.model.parsing.TargetElement;
+import org.gcube.data.publishing.ckan2zenodo.model.parsing.Value;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Contributor;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Creator;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata;
@@ -56,6 +60,10 @@ public class Translator {
this(mappings,ResourceFilter.PASS_ALL);
}
+ public Translator(Mappings m) {
+ this(m.getMappings(),m.getResourceFilters());
+ }
+
public ZenodoDeposition transform(CkanItemDescriptor toTransform, ZenodoDeposition deposition) throws TransformationException {
log.debug("Transforming "+toTransform+". Existing Deposition is : "+deposition);
@@ -154,24 +162,33 @@ public class Translator {
DocumentContext sourceCtx=JsonPath.using(Parsing.JSON_PATH_ALWAYS_LIST_CONFIG).parse(source.getContent());
DocumentContext targetCtx=JsonPath.using(Parsing.JSON_PATH_ALWAYS_LIST_CONFIG).parse(mapper.writeValueAsString(target));
+ // FOR EACH MAPPING
+ // IF source
+ // For each source value ; NB GET FIRST MATCHING Value path
+ // APPLY TRANSFORMATIONS
+ // FIND/INIT TARGET PATH (OPTS isArray, replace)
+ // SET TARGET ELEMENT (OPTS replace, regexp)
+ // IF SINGLE -> property
+ // iF MULITPLE -> object
+ // ELSE TODO
for(Mapping mapping:mappings) {
+ log.debug("Applying {} ",mapping);
try {
- // extract source
+ // "EVALUATE SURCE VALUES"
List sourceValues=new ArrayList<>();
for(Value v: mapping.getSource().getValues()) {
-
- String actualValue=null;
+ List actualValues=new ArrayList();
switch(v.getType()) {
case constant : {
- actualValue=v.getValue();
+ actualValues.add(v.getValue());
break;
}
case jsonPath : {
for(String s: ((Collection extends String>) sourceCtx.read(v.getValue()))){
if(s!=null) {
s=s.trim();
- if(!s.isEmpty())actualValue=s;
+ if(!s.isEmpty())actualValues.add(s);
}
}
@@ -180,24 +197,50 @@ public class Translator {
}
- // Adding to actual values
- if(actualValue!=null) {
+ // Applygin splits
+ for(String foundVal:actualValues) {
if(v.getSplit()!=null)
- for(String toAdd:actualValue.split(v.getSplit()))
+ for(String toAdd:foundVal.split(v.getSplit()))
sourceValues.add(toAdd.trim());
- else sourceValues.add(actualValue);
+ else sourceValues.add(foundVal);
}
+
+
if(!sourceValues.isEmpty()) break;
}
+ log.debug("Found matching "+sourceValues);
+ // ************** INIT TARGET PATH
+ // CHECK INIT TARGET PATH
+ ArrayList