91 lines
3.6 KiB
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;
|
|
}
|
|
}
|