diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Datasource.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Datasource.java index 54cfc8a..5067ada 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Datasource.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Datasource.java @@ -137,6 +137,11 @@ public class Datasource extends OafEntity implements Serializable { private String lastconsenttermsofusedate; + /** + * EOSC Interoperability Framework Guidelines + */ + private List eoscifguidelines; + public Qualifier getDatasourcetype() { return datasourcetype; } @@ -553,6 +558,14 @@ public class Datasource extends OafEntity implements Serializable { this.consenttermsofusedate = consenttermsofusedate; } + public List getEoscifguidelines() { + return eoscifguidelines; + } + + public void setEoscifguidelines(List eoscifguidelines) { + this.eoscifguidelines = eoscifguidelines; + } + @Override public void mergeFrom(final OafEntity e) { super.mergeFrom(e); diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/EoscIfGuidelines.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/EoscIfGuidelines.java new file mode 100644 index 0000000..2e8a1b6 --- /dev/null +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/EoscIfGuidelines.java @@ -0,0 +1,97 @@ +package eu.dnetlib.dhp.schema.oaf; + +import java.io.Serializable; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.apache.commons.lang3.StringUtils; + +/** + * Describes a reference to the EOSC Interoperability Framework (IF) Guidelines + */ +public class EoscIfGuidelines implements Serializable { + + /** + * EOSC-IF local code. Later on it could be populated with a PID (e.g. DOI), but for the time being we stick to + * a more loose definition. + */ + private String code; + + /** + * EOSC-IF label + */ + private String label; + + /** + * EOSC-IF url + */ + private String url; + + /** + * EOSC-IF semantic relation (e.g. compliesWith). Values shall be controlled by a dedicated vocabulary. + */ + private String semanticRelation; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getSemanticRelation() { + return semanticRelation; + } + + public void setSemanticRelation(String semanticRelation) { + this.semanticRelation = semanticRelation; + } + + private String toComparableString() { + return Stream + .of( + Optional.ofNullable(getCode()).orElse(""), + Optional.ofNullable(getLabel()).orElse(""), + Optional.ofNullable(getUrl()).orElse(""), + Optional.ofNullable(getSemanticRelation()).orElse("")) + .filter(StringUtils::isNotBlank) + .collect(Collectors.joining("||")); + } + + @Override + public int hashCode() { + return toComparableString().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + + EoscIfGuidelines other = (EoscIfGuidelines) obj; + + return toComparableString().equals(other.toComparableString()); + } +} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java index cd70b47..6386a19 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java @@ -142,6 +142,11 @@ public class Result extends OafEntity implements Serializable { */ private List instance; + /** + * EOSC Interoperability Framework Guidelines + */ + private List eoscifguidelines; + /** * Gets measures. * @@ -554,6 +559,13 @@ public class Result extends OafEntity implements Serializable { this.instance = instance; } + public List getEoscifguidelines() { + return eoscifguidelines; + } + + public void setEoscifguidelines(List eoscifguidelines) { + this.eoscifguidelines = eoscifguidelines; + } /** * Is an enrichment boolean. @@ -749,6 +761,8 @@ public class Result extends OafEntity implements Serializable { measures = mergeLists(measures, r.getMeasures()); + eoscifguidelines = mergeLists(eoscifguidelines, r.getEoscifguidelines()); + if( !isAnEnrichment(this) && !isAnEnrichment(e)) instance = mergeLists(instance, r.getInstance()); else { diff --git a/src/test/java/eu/dnetlib/dhp/schema/oaf/MergeTest.java b/src/test/java/eu/dnetlib/dhp/schema/oaf/MergeTest.java index 1c66b11..db09974 100644 --- a/src/test/java/eu/dnetlib/dhp/schema/oaf/MergeTest.java +++ b/src/test/java/eu/dnetlib/dhp/schema/oaf/MergeTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; /** * The type Merge test. @@ -451,6 +452,61 @@ class MergeTest { assertEquals(3, a.getSubject().size()); } + /** + * Merge publication EoscIfGuidelines test. + */ + @Test + void mergePublicationEoscIfGuidelinesTest() { + + Publication a = publication(); + Publication b = publication(); + + a.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); + b.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); + + a.mergeFrom(b); + + assertNotNull(a.getEoscifguidelines()); + assertEquals(1, a.getEoscifguidelines().size()); + + a.getEoscifguidelines().clear(); + b.getEoscifguidelines().clear(); + + a.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); + b.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); + + b.mergeFrom(a); + + assertNotNull(a.getEoscifguidelines()); + assertEquals(1, a.getEoscifguidelines().size()); + + EoscIfGuidelines e = b.getEoscifguidelines().get(0); + assertEquals("a", e.getCode()); + assertEquals("label a", e.getLabel()); + assertEquals("https://aaa.aa", e.getUrl()); + assertEquals("semRelA", e.getSemanticRelation()); + + a.getEoscifguidelines().clear(); + b.getEoscifguidelines().clear(); + + a.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); + b.setEoscifguidelines(Lists.newArrayList(eoscifg("b", "label b", "https://bbb.bb", "semRelB"))); + + a.mergeFrom(b); + + assertNotNull(a.getEoscifguidelines()); + assertEquals(2, a.getEoscifguidelines().size()); + } + + private EoscIfGuidelines eoscifg(String code, String label, String url, String semrel) { + EoscIfGuidelines e = new EoscIfGuidelines(); + e.setCode(code); + e.setLabel(label); + e.setUrl(url); + e.setSemanticRelation(semrel); + return e; + } + /** * Merge relation test. */