116 lines
6.1 KiB
Java
116 lines
6.1 KiB
Java
package eu.eudat.models.deposit.zenodo.mapper;
|
|
|
|
import eu.eudat.data.entities.DMP;
|
|
import eu.eudat.data.entities.Organisation;
|
|
import eu.eudat.data.entities.UserDMP;
|
|
import eu.eudat.logic.proxy.config.DOIFunder;
|
|
import eu.eudat.logic.proxy.config.configloaders.ConfigLoader;
|
|
import eu.eudat.models.deposit.zenodo.*;
|
|
import org.springframework.core.env.Environment;
|
|
|
|
import java.time.Instant;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class DMPToZenodoMapper {
|
|
|
|
public static ZenodoDeposit fromDMP(DMP dmp, Environment environment, ConfigLoader configLoader) {
|
|
Map<String, Object> extraProperties = dmp.getExtraProperties() != null ? new org.json.JSONObject(dmp.getExtraProperties()).toMap() : new HashMap<>();
|
|
ZenodoDeposit deposit = new ZenodoDeposit();
|
|
deposit.setMetadata(new ZenodoDepositMetadata());
|
|
deposit.getMetadata().setTitle(dmp.getLabel());
|
|
deposit.getMetadata().setUploadType("publication");
|
|
deposit.getMetadata().setPublicationType("datamanagementplan");
|
|
deposit.getMetadata().setDescription((dmp.getDescription() != null && !dmp.getDescription().isEmpty() ? dmp.getDescription() : "<p></p>"));
|
|
deposit.getMetadata().setVersion(dmp.getVersion().toString());
|
|
ZenodoComunity community = new ZenodoComunity();
|
|
community.setIdentifier(environment.getProperty("zenodo.community"));
|
|
deposit.getMetadata().setCommunities(Collections.singletonList(community));
|
|
if (extraProperties.get("visible") == null) {
|
|
deposit.getMetadata().setAccessRight(ZenodoAccessRight.RESTRICTED);
|
|
deposit.getMetadata().setAccessConditions("");
|
|
} else {
|
|
if (((Boolean) extraProperties.get("visible"))) {
|
|
Instant publicationDate = Instant.parse(extraProperties.get("publicDate").toString());
|
|
if (publicationDate.isBefore(Instant.now())) {
|
|
deposit.getMetadata().setAccessRight(ZenodoAccessRight.OPEN);
|
|
} else {
|
|
deposit.getMetadata().setAccessRight(ZenodoAccessRight.EMBARGOED);
|
|
deposit.getMetadata().setEmbargoDate(publicationDate.toString());
|
|
}
|
|
|
|
if (extraProperties.get("license") != null) {
|
|
deposit.getMetadata().setLicense(((Map<?, ?>) extraProperties.get("license")).get("pid").toString());
|
|
}
|
|
} else {
|
|
deposit.getMetadata().setAccessRight(ZenodoAccessRight.RESTRICTED);
|
|
deposit.getMetadata().setAccessConditions("");
|
|
}
|
|
}
|
|
if (dmp.isPublic()) {
|
|
ZenodoRelator relator = new ZenodoRelator();
|
|
relator.setIdentifier((environment.getProperty("dmp.domain") + "/external/zenodo/" + dmp.getId().toString()));
|
|
relator.setRelation("isIdenticalTo");
|
|
deposit.getMetadata().setRelatedIdentifiers(Collections.singletonList(relator));
|
|
}
|
|
deposit.getMetadata().setContributors(new LinkedList<>());
|
|
List<ZenodoContributor> contributors = dmp.getUsers().stream().map(userDMP -> {
|
|
ZenodoContributor contributor = new ZenodoContributor();
|
|
contributor.setName(userDMP.getUser().getName());
|
|
contributor.setType("ProjectMember");
|
|
if (dmp.getOrganisations() != null && !dmp.getOrganisations().isEmpty()) {
|
|
contributor.setAffiliation(dmp.getOrganisations()
|
|
.stream().map(Organisation::getLabel).collect(Collectors.joining(", ")));
|
|
} else {
|
|
contributor.setAffiliation(environment.getProperty("zenodo.affiliation"));
|
|
}
|
|
return contributor;
|
|
}).collect(Collectors.toList());
|
|
|
|
List<ZenodoContributor> researchers = dmp.getResearchers().stream().map(researcher -> {
|
|
ZenodoContributor contributor = new ZenodoContributor();
|
|
contributor.setName(researcher.getLabel());
|
|
contributor.setType("Researcher");
|
|
String referenceHead = researcher.getReference().split(":")[0];
|
|
String referenceTail = researcher.getReference().replace(referenceHead + ":", "");
|
|
contributor.setAffiliation(referenceHead);
|
|
if (referenceHead.equalsIgnoreCase("ORCID")) {
|
|
contributor.setOrcid(referenceTail);
|
|
}
|
|
return contributor;
|
|
}).collect(Collectors.toList());
|
|
|
|
deposit.getMetadata().getContributors().addAll(contributors);
|
|
deposit.getMetadata().getContributors().addAll(researchers);
|
|
|
|
if (dmp.getGrant().getReference() == null) {
|
|
dmp.getGrant().setReference("dmp:" + dmp.getGrant().getId());
|
|
}
|
|
String grantReferenceHead = dmp.getGrant().getReference().split(":")[0];
|
|
if (grantReferenceHead.equals("openaire")) {
|
|
String grantReferenceTail = dmp.getGrant().getReference().split(":")[3];
|
|
DOIFunder doiFunder = configLoader.getDOIFunders().stream()
|
|
.filter(doiFunder1 -> dmp.getGrant().getFunder().getLabel().contains(doiFunder1.getFunder()) || doiFunder1.getFunder().contains(dmp.getGrant().getFunder().getLabel()))
|
|
.findFirst().orElse(null);
|
|
if (doiFunder != null) {
|
|
String finalId = doiFunder.getDOI() + "::" + grantReferenceTail;
|
|
ZenodoGrant grant = new ZenodoGrant();
|
|
grant.setId(finalId);
|
|
deposit.getMetadata().setGrants(Collections.singletonList(grant));
|
|
}
|
|
}
|
|
ZenodoContributor creator = new ZenodoContributor();
|
|
creator.setName(dmp.getUsers().stream().filter(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser().getName());
|
|
if (dmp.getOrganisations() != null && !dmp.getOrganisations().isEmpty()) {
|
|
creator.setAffiliation(dmp.getOrganisations()
|
|
.stream().map(Organisation::getLabel).collect(Collectors.joining(", ")));
|
|
} else {
|
|
creator.setAffiliation(environment.getProperty("zenodo.affiliation"));
|
|
}
|
|
deposit.getMetadata().setCreators(Collections.singletonList(creator));
|
|
|
|
return deposit;
|
|
}
|
|
}
|
|
|