file-transformer-rda-json/core/src/main/java/eu/eudat/file/transformer/rda/mapper/ContributorRDAMapper.java

91 lines
3.6 KiB
Java

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;
}
}