add semantic publication date logic
This commit is contained in:
parent
7889dedd47
commit
4d01fd1b9a
|
@ -1,6 +1,7 @@
|
||||||
package org.opencdmp.deposit.zenodorepository.model.builder;
|
package org.opencdmp.deposit.zenodorepository.model.builder;
|
||||||
|
|
||||||
import gr.cite.tools.exception.MyApplicationException;
|
import gr.cite.tools.exception.MyApplicationException;
|
||||||
|
import gr.cite.tools.logging.LoggerService;
|
||||||
import org.opencdmp.commonmodels.enums.DmpAccessType;
|
import org.opencdmp.commonmodels.enums.DmpAccessType;
|
||||||
import org.opencdmp.commonmodels.enums.DmpUserRole;
|
import org.opencdmp.commonmodels.enums.DmpUserRole;
|
||||||
import org.opencdmp.commonmodels.models.DmpUserModel;
|
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.DefinitionModel;
|
||||||
import org.opencdmp.commonmodels.models.descriptiotemplate.fielddata.RadioBoxDataModel;
|
import org.opencdmp.commonmodels.models.descriptiotemplate.fielddata.RadioBoxDataModel;
|
||||||
import org.opencdmp.commonmodels.models.descriptiotemplate.fielddata.SelectDataModel;
|
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.dmp.DmpModel;
|
||||||
|
import org.opencdmp.commonmodels.models.dmpblueprint.SectionModel;
|
||||||
import org.opencdmp.commonmodels.models.dmpreference.DmpReferenceModel;
|
import org.opencdmp.commonmodels.models.dmpreference.DmpReferenceModel;
|
||||||
import org.opencdmp.commonmodels.models.reference.ReferenceFieldModel;
|
import org.opencdmp.commonmodels.models.reference.ReferenceFieldModel;
|
||||||
import org.opencdmp.commonmodels.models.reference.ReferenceModel;
|
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.configuration.pid.PidProperties;
|
||||||
import org.opencdmp.deposit.zenodorepository.enums.ZenodoAccessRight;
|
import org.opencdmp.deposit.zenodorepository.enums.ZenodoAccessRight;
|
||||||
import org.opencdmp.deposit.zenodorepository.model.*;
|
import org.opencdmp.deposit.zenodorepository.model.*;
|
||||||
|
import org.opencdmp.deposit.zenodorepository.service.zenodo.ZenodoDepositServiceImpl;
|
||||||
import org.opencdmp.deposit.zenodorepository.service.zenodo.ZenodoServiceProperties;
|
import org.opencdmp.deposit.zenodorepository.service.zenodo.ZenodoServiceProperties;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZoneOffset;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -31,12 +39,14 @@ import java.util.stream.Collectors;
|
||||||
@Component
|
@Component
|
||||||
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||||
public class ZenodoBuilder {
|
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 UPLOAD_TYPE = "publication";
|
||||||
private static final String PUBLICATION_TYPE = "datamanagementplan";
|
private static final String PUBLICATION_TYPE = "datamanagementplan";
|
||||||
private static final String IS_IDENTICAL_TO = "isIdenticalTo";
|
private static final String IS_IDENTICAL_TO = "isIdenticalTo";
|
||||||
private static final String CONTRIBUTOR_TYPE_RESEARCHER = "Researcher";
|
private static final String CONTRIBUTOR_TYPE_RESEARCHER = "Researcher";
|
||||||
private static final String CONTRIBUTOR_TYPE_PROJECT_MANAGER = "ProjectMember";
|
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 PidProperties pidProperties;
|
||||||
private final IdentifierProperties identifierProperties;
|
private final IdentifierProperties identifierProperties;
|
||||||
|
@ -66,6 +76,20 @@ public class ZenodoBuilder {
|
||||||
community.setIdentifier(zenodoCommunity);
|
community.setIdentifier(zenodoCommunity);
|
||||||
deposit.getMetadata().getCommunities().add(community);
|
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.applyAccessRight(dmp, deposit);
|
||||||
this.applyIsIdenticalTo(dmp, deposit);
|
this.applyIsIdenticalTo(dmp, deposit);
|
||||||
this.applyLicenses(dmp, deposit);
|
this.applyLicenses(dmp, deposit);
|
||||||
|
@ -77,6 +101,22 @@ public class ZenodoBuilder {
|
||||||
return deposit;
|
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){
|
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();
|
return definitionModel.getAllField().stream().filter(x-> x.getSchematics() != null && x.getSchematics().contains(relatedId)).toList();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue