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

74 lines
2.5 KiB
Java

package eu.eudat.file.transformer.model.rda.mapper;
import eu.eudat.commonmodels.models.reference.ReferenceDefinitionModel;
import eu.eudat.commonmodels.models.reference.ReferenceFieldModel;
import eu.eudat.commonmodels.models.reference.ReferenceModel;
import eu.eudat.file.transformer.model.FundingModel;
import eu.eudat.file.transformer.model.rda.Contributor;
import eu.eudat.file.transformer.model.rda.Funding;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Component
public class ReferenceContributorRDAMapper{
private final ContributorIdRDAMapper contributorIdRDAMapper;
public ReferenceContributorRDAMapper(ContributorIdRDAMapper contributorIdRDAMapper) {
this.contributorIdRDAMapper = contributorIdRDAMapper;
}
public Contributor toRDA(ReferenceModel researcher) {
if (researcher == null) return null;
Contributor rda = new Contributor();
rda.setContributorId(contributorIdRDAMapper.toRDA(researcher.getReference()));
rda.setName(researcher.getLabel());
if (researcher.getDefinition() != null && researcher.getDefinition().getFields() != null) {
ReferenceFieldModel emailField = researcher.getDefinition().getFields().stream().filter(field -> field.getCode().equals("primaryEmail")).findFirst().orElse(null);
if (emailField != null) {
rda.setMbox(emailField.getValue());
}
}
return rda;
}
public List<Contributor> toRDAs(List<ReferenceModel> researchers) {
if (researchers == null) return null;
List<Contributor> items = new ArrayList<>();
for (ReferenceModel researcher : researchers){
Contributor item = this.toRDA(researcher);
if (item != null) items.add(item);
}
return items;
}
public ReferenceModel toEntity(Contributor rda) {
if (rda == null || rda.getContributorId() == null) return null;
ReferenceModel reference = new ReferenceModel();
reference.setReference(contributorIdRDAMapper.toEntity(rda.getContributorId()));
reference.setLabel(rda.getName());
ReferenceFieldModel field = new ReferenceFieldModel();
field.setCode("primaryEmail");
field.setValue(rda.getMbox());
reference.setDefinition(new ReferenceDefinitionModel());
reference.getDefinition().setFields(List.of(field));
return reference;
}
public List<ReferenceModel> toEntities(List<Contributor> rdas) {
if (rdas == null) return null;
List<ReferenceModel> items = new ArrayList<>();
for (Contributor rda : rdas){
ReferenceModel item = this.toEntity(rda);
if (item != null) items.add(item);
}
return items;
}
}