add semantic publication date logic

This commit is contained in:
Efstratios Giannopoulos 2024-05-23 11:05:00 +03:00
parent 7889dedd47
commit 4d01fd1b9a
1 changed files with 40 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package org.opencdmp.deposit.zenodorepository.model.builder;
import gr.cite.tools.exception.MyApplicationException;
import gr.cite.tools.logging.LoggerService;
import org.opencdmp.commonmodels.enums.DmpAccessType;
import org.opencdmp.commonmodels.enums.DmpUserRole;
import org.opencdmp.commonmodels.models.DmpUserModel;
@ -8,7 +9,9 @@ import org.opencdmp.commonmodels.models.description.*;
import org.opencdmp.commonmodels.models.descriptiotemplate.DefinitionModel;
import org.opencdmp.commonmodels.models.descriptiotemplate.fielddata.RadioBoxDataModel;
import org.opencdmp.commonmodels.models.descriptiotemplate.fielddata.SelectDataModel;
import org.opencdmp.commonmodels.models.dmp.DmpBlueprintValueModel;
import org.opencdmp.commonmodels.models.dmp.DmpModel;
import org.opencdmp.commonmodels.models.dmpblueprint.SectionModel;
import org.opencdmp.commonmodels.models.dmpreference.DmpReferenceModel;
import org.opencdmp.commonmodels.models.reference.ReferenceFieldModel;
import org.opencdmp.commonmodels.models.reference.ReferenceModel;
@ -17,13 +20,18 @@ import org.opencdmp.deposit.zenodorepository.configuration.identifier.Identifier
import org.opencdmp.deposit.zenodorepository.configuration.pid.PidProperties;
import org.opencdmp.deposit.zenodorepository.enums.ZenodoAccessRight;
import org.opencdmp.deposit.zenodorepository.model.*;
import org.opencdmp.deposit.zenodorepository.service.zenodo.ZenodoDepositServiceImpl;
import org.opencdmp.deposit.zenodorepository.service.zenodo.ZenodoServiceProperties;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@ -31,12 +39,14 @@ import java.util.stream.Collectors;
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class ZenodoBuilder {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(ZenodoDepositServiceImpl.class));
private static final String UPLOAD_TYPE = "publication";
private static final String PUBLICATION_TYPE = "datamanagementplan";
private static final String IS_IDENTICAL_TO = "isIdenticalTo";
private static final String CONTRIBUTOR_TYPE_RESEARCHER = "Researcher";
private static final String CONTRIBUTOR_TYPE_PROJECT_MANAGER = "ProjectMember";
private static final String SEMANTIC_PUBLICATION_DATE = "zenodo.publication_date";
private final PidProperties pidProperties;
private final IdentifierProperties identifierProperties;
@ -66,6 +76,20 @@ public class ZenodoBuilder {
community.setIdentifier(zenodoCommunity);
deposit.getMetadata().getCommunities().add(community);
}
org.opencdmp.commonmodels.models.dmpblueprint.FieldModel fieldOfSemantic = this.getFieldOfSemantic(dmp, SEMANTIC_PUBLICATION_DATE);
if (fieldOfSemantic != null){
DmpBlueprintValueModel dmpBlueprintValueModel = this.getDmpBlueprintValue(dmp, fieldOfSemantic.getId());
if (dmpBlueprintValueModel != null && dmpBlueprintValueModel.getValue() != null && !dmpBlueprintValueModel.getValue().isBlank()){
try {
Instant instant = Instant.parse(dmpBlueprintValueModel.getValue());
deposit.getMetadata().setPublicationDate(DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.systemDefault()).format(instant));
}catch (Exception e){
logger.error(e.getMessage(), e);
}
}
}
this.applyAccessRight(dmp, deposit);
this.applyIsIdenticalTo(dmp, deposit);
this.applyLicenses(dmp, deposit);
@ -77,6 +101,22 @@ public class ZenodoBuilder {
return deposit;
}
private DmpBlueprintValueModel getDmpBlueprintValue(DmpModel dmp, UUID id){
if (dmp == null || dmp.getProperties() == null || dmp.getProperties().getDmpBlueprintValues() == null) return null;
return dmp.getProperties().getDmpBlueprintValues().stream().filter(x-> x.getFieldId().equals(id)).findFirst().orElse(null);
}
private org.opencdmp.commonmodels.models.dmpblueprint.FieldModel getFieldOfSemantic(DmpModel dmp, String semanticKey){
if (dmp == null || dmp.getDmpBlueprint() == null || dmp.getDmpBlueprint().getDefinition() == null || dmp.getDmpBlueprint().getDefinition().getSections() == null) return null;
for (SectionModel sectionModel : dmp.getDmpBlueprint().getDefinition().getSections()){
if (sectionModel.getFields() != null){
org.opencdmp.commonmodels.models.dmpblueprint.FieldModel fieldModel = sectionModel.getFields().stream().filter(x-> x.getSemantics() != null && x.getSemantics().contains(semanticKey)).findFirst().orElse(null);
if (fieldModel != null) return fieldModel;
}
}
return null;
}
private List<org.opencdmp.commonmodels.models.descriptiotemplate.FieldModel> findSchematicValues(String relatedId, DefinitionModel definitionModel){
return definitionModel.getAllField().stream().filter(x-> x.getSchematics() != null && x.getSchematics().contains(relatedId)).toList();
}