package eu.eudat.file.transformer.rda.mapper; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.file.transformer.enums.ContactInfoType; import eu.eudat.file.transformer.models.dmp.DmpUserFileTransformerModel; import eu.eudat.file.transformer.models.reference.DefinitionFileTransformerModel; import eu.eudat.file.transformer.models.reference.FieldFileTransformerModel; import eu.eudat.file.transformer.models.reference.ReferenceFileTransformerModel; import eu.eudat.file.transformer.models.user.UserContactInfoFileTransformerModel; import eu.eudat.file.transformer.rda.Contributor; import eu.eudat.file.transformer.rda.ContributorId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.HashSet; import java.util.List; public class ContributorRDAMapper { private static final Logger logger = LoggerFactory.getLogger(ContributorRDAMapper.class); public static Contributor toRDA(DmpUserFileTransformerModel userDMP) { Contributor rda = new Contributor(); rda.setContributorId(ContributorIdRDAMapper.toRDA(userDMP.getUser().getId())); if (userDMP.getUser().getName() == null) { throw new IllegalArgumentException("Contributor Name is missing"); } rda.setName(userDMP.getUser().getName()); UserContactInfoFileTransformerModel emailContact = userDMP.getUser().getContacts().stream().filter(userContactInfo -> userContactInfo.getType().equals(ContactInfoType.Email)).findFirst().orElse(null); if (emailContact != null) { rda.setMbox(emailContact.getValue()); } rda.setRole(new HashSet<>(List.of(userDMP.getRole().name()))); return rda; } public static Contributor toRDA(ReferenceFileTransformerModel researcher) { Contributor rda = new Contributor(); rda.setContributorId(ContributorIdRDAMapper.toRDA(researcher.getReference())); rda.setName(researcher.getLabel()); if (researcher.getDefinition() != null) { FieldFileTransformerModel emailField = researcher.getDefinition().getFields().stream().filter(field -> field.getCode().equals("primaryEmail")).findFirst().orElse(null); if (emailField != null) { rda.setMbox(emailField.getValue()); } } // rda.setRole(new HashSet<>(Arrays.asList(UserDMP.UserDMPRoles.fromInteger(userDMP.getRole()).name()))); return rda; } public static Contributor toRDA(String value) { ObjectMapper mapper = new ObjectMapper(); try { ReferenceFileTransformerModel researcher = mapper.readValue(value, ReferenceFileTransformerModel.class); return toRDA(researcher); } catch (IOException e) { logger.error(e.getMessage(), e); } return null; } public static ReferenceFileTransformerModel toEntity(Contributor rda) { ReferenceFileTransformerModel reference = new ReferenceFileTransformerModel(); String referenceString; if (rda.getContributorId() != null) { if (rda.getContributorId().getType() == ContributorId.Type.ORCID) { String id = rda.getContributorId().getIdentifier().replace("http://orcid.org/", ""); referenceString = "orcid:" + id; } else { String idParts[] = rda.getContributorId().getIdentifier().split(":"); if (idParts.length == 1) { referenceString = "dmp:" + rda.getContributorId().getIdentifier(); } else { referenceString = rda.getContributorId().getIdentifier(); } } reference.setReference(referenceString); reference.setLabel(rda.getName()); FieldFileTransformerModel field = new FieldFileTransformerModel(); field.setCode("primaryEmail"); field.setValue(rda.getMbox()); reference.setDefinition(new DefinitionFileTransformerModel()); reference.getDefinition().setFields(List.of(field)); } else { return null; } return reference; } }