Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 0.0.3-maintenance
  • 1.0-maintenance
  • 2.0-maintenance
  • 2.1-maintenance
  • AOU-1412_Add_checksum_of_DataFile_when_importing_in_Fedora
  • HBO-test-jenkins-library
  • HCA-PortingSolidify-3.2
  • HCA-PortingSolidify-3.5
  • adf-1418-do-not-index-certain-files
  • adf-1464-job-clean-download-files
  • adf-1867-list-publications-stats
  • adf-763-1127-improve-license-mapping-during-imports
  • adf-907-notifications-mark-as-read
  • adf-956-add-imprimatur-and-mode-de-diffussion-for-thesis
  • adf-956-new-document-types-imprimatur-and-mode-de-diffusion
  • adf-979-add-depositor-in-notifications-email
  • adf-squash-commits-jb
  • adf-validator-name
  • aou-1512_fix_coherence_orders_for_indexed_structures
  • contributors-with-names
  • jbc-bibliography-tmpl
  • jbc-csl-correctionsDD
  • jbc-update-coverpage
  • master
  • remove-not-neccessary-ExtendWith-annotations
  • rod-refactor-fedora-storage-get-datastream-index
  • rodn-113-indexing-service
  • rodn-1136-author-can-send-in-validation
  • rodn-1253-fix-validator-comments-notifications
  • rodn-1634-bibliography-add-sort-by-validation-date
  • rodn-1829-scheduled-task-to-export-to-orcid
  • rodn-833-add-validation-rules-before-submit
  • rodn-access-contributor-by-orcid-old
  • rodn-finalize-swiss-library-exports-task
  • rodn-fix-IT
  • rodn-improve-access-it
  • rodn-index-contributors-without-director
  • rodn-index-fix-indexing-with-large-fulltext
  • rodn-index-subtype-code
  • rodn-language-refactoring
  • rodn-merge-users-it
  • rodn-orcid-export-master-with-other-id
  • rodn-orcid-solidify-webhooks
  • rodn-prevent-hibernate-circular-exception
  • rodn-refactor-labels
  • rodn-search-accent-insensitive
  • rodn-shared-reference-to-collection-debug
  • rodn-solidify-3.5
  • rodn-solidify-es-8
  • rodn-use-index-to-find-validable-publications
  • rodn-use-solidify-global-banner
  • unit-test-bibtex-escaper
  • aou-0.0.1
  • aou-0.0.2
  • aou-0.0.3
  • aou-0.0.3-patch1
  • aou-0.0.4
  • aou-0.0.5
  • aou-1.0.0
  • aou-1.0.1
  • aou-1.0.10
  • aou-1.0.11
  • aou-1.0.12
  • aou-1.0.13
  • aou-1.0.14
  • aou-1.0.15
  • aou-1.0.16
  • aou-1.0.17
  • aou-1.0.18
  • aou-1.0.19
  • aou-1.0.2
  • aou-1.0.20
  • aou-1.0.21
  • aou-1.0.3
  • aou-1.0.4
  • aou-1.0.5
  • aou-1.0.6
  • aou-1.0.7
  • aou-1.0.8
  • aou-1.0.9
  • aou-1.1.0
  • aou-2.0.0
  • aou-2.0.0-RC1
  • aou-2.0.0-RC2
  • aou-2.0.0-RC3
  • aou-2.0.1
  • aou-2.0.10
  • aou-2.0.11
  • aou-2.0.12
  • aou-2.0.13
  • aou-2.0.14
  • aou-2.0.15
  • aou-2.0.16
  • aou-2.0.17
  • aou-2.0.18
  • aou-2.0.19
  • aou-2.0.2
  • aou-2.0.20
  • aou-2.0.21
  • aou-2.0.22
  • aou-2.0.23
  • aou-2.0.24
  • aou-2.0.25
  • aou-2.0.26
  • aou-2.0.27
  • aou-2.0.28
  • aou-2.0.29
  • aou-2.0.3
  • aou-2.0.30
  • aou-2.0.31
  • aou-2.0.32
  • aou-2.0.33
  • aou-2.0.34
  • aou-2.0.4
  • aou-2.0.5
  • aou-2.0.6
  • aou-2.0.7
  • aou-2.0.8
  • aou-2.0.9
  • aou-2.1.0
  • aou-2.1.1
  • aou-2.1.10
  • aou-2.1.11
  • aou-2.1.12
  • aou-2.1.13
  • aou-2.1.14
  • aou-2.1.15
  • aou-2.1.16
  • aou-2.1.17
  • aou-2.1.18
  • aou-2.1.19
  • aou-2.1.2
  • aou-2.1.20
  • aou-2.1.21
  • aou-2.1.22
  • aou-2.1.23
  • aou-2.1.24
  • aou-2.1.25
  • aou-2.1.26
  • aou-2.1.27
  • aou-2.1.28
  • aou-2.1.29
  • aou-2.1.3
  • aou-2.1.30
  • aou-2.1.31
  • aou-2.1.32
  • aou-2.1.33
  • aou-2.1.34
  • aou-2.1.4
  • aou-2.1.5
  • aou-2.1.6
  • aou-2.1.7
152 results

Target

Select target project
  • aou/aou-backend
1 result
Select Git revision
  • 0.0.3-maintenance
  • 1.0-maintenance
  • 2.0-maintenance
  • 2.1-maintenance
  • AOU-1412_Add_checksum_of_DataFile_when_importing_in_Fedora
  • HBO-test-jenkins-library
  • HCA-PortingSolidify-3.2
  • HCA-PortingSolidify-3.5
  • adf-1418-do-not-index-certain-files
  • adf-1464-job-clean-download-files
  • adf-1867-list-publications-stats
  • adf-763-1127-improve-license-mapping-during-imports
  • adf-907-notifications-mark-as-read
  • adf-956-add-imprimatur-and-mode-de-diffussion-for-thesis
  • adf-956-new-document-types-imprimatur-and-mode-de-diffusion
  • adf-979-add-depositor-in-notifications-email
  • adf-squash-commits-jb
  • adf-validator-name
  • aou-1512_fix_coherence_orders_for_indexed_structures
  • contributors-with-names
  • jbc-bibliography-tmpl
  • jbc-csl-correctionsDD
  • jbc-update-coverpage
  • master
  • remove-not-neccessary-ExtendWith-annotations
  • rod-refactor-fedora-storage-get-datastream-index
  • rodn-113-indexing-service
  • rodn-1136-author-can-send-in-validation
  • rodn-1253-fix-validator-comments-notifications
  • rodn-1634-bibliography-add-sort-by-validation-date
  • rodn-1829-scheduled-task-to-export-to-orcid
  • rodn-833-add-validation-rules-before-submit
  • rodn-access-contributor-by-orcid-old
  • rodn-finalize-swiss-library-exports-task
  • rodn-fix-IT
  • rodn-improve-access-it
  • rodn-index-contributors-without-director
  • rodn-index-fix-indexing-with-large-fulltext
  • rodn-index-subtype-code
  • rodn-language-refactoring
  • rodn-merge-users-it
  • rodn-orcid-export-master-with-other-id
  • rodn-orcid-solidify-webhooks
  • rodn-prevent-hibernate-circular-exception
  • rodn-refactor-labels
  • rodn-search-accent-insensitive
  • rodn-shared-reference-to-collection-debug
  • rodn-solidify-3.5
  • rodn-solidify-es-8
  • rodn-use-index-to-find-validable-publications
  • rodn-use-solidify-global-banner
  • unit-test-bibtex-escaper
  • aou-0.0.1
  • aou-0.0.2
  • aou-0.0.3
  • aou-0.0.3-patch1
  • aou-0.0.4
  • aou-0.0.5
  • aou-1.0.0
  • aou-1.0.1
  • aou-1.0.10
  • aou-1.0.11
  • aou-1.0.12
  • aou-1.0.13
  • aou-1.0.14
  • aou-1.0.15
  • aou-1.0.16
  • aou-1.0.17
  • aou-1.0.18
  • aou-1.0.19
  • aou-1.0.2
  • aou-1.0.20
  • aou-1.0.21
  • aou-1.0.3
  • aou-1.0.4
  • aou-1.0.5
  • aou-1.0.6
  • aou-1.0.7
  • aou-1.0.8
  • aou-1.0.9
  • aou-1.1.0
  • aou-2.0.0
  • aou-2.0.0-RC1
  • aou-2.0.0-RC2
  • aou-2.0.0-RC3
  • aou-2.0.1
  • aou-2.0.10
  • aou-2.0.11
  • aou-2.0.12
  • aou-2.0.13
  • aou-2.0.14
  • aou-2.0.15
  • aou-2.0.16
  • aou-2.0.17
  • aou-2.0.18
  • aou-2.0.19
  • aou-2.0.2
  • aou-2.0.20
  • aou-2.0.21
  • aou-2.0.22
  • aou-2.0.23
  • aou-2.0.24
  • aou-2.0.25
  • aou-2.0.26
  • aou-2.0.27
  • aou-2.0.28
  • aou-2.0.29
  • aou-2.0.3
  • aou-2.0.30
  • aou-2.0.31
  • aou-2.0.32
  • aou-2.0.33
  • aou-2.0.34
  • aou-2.0.4
  • aou-2.0.5
  • aou-2.0.6
  • aou-2.0.7
  • aou-2.0.8
  • aou-2.0.9
  • aou-2.1.0
  • aou-2.1.1
  • aou-2.1.10
  • aou-2.1.11
  • aou-2.1.12
  • aou-2.1.13
  • aou-2.1.14
  • aou-2.1.15
  • aou-2.1.16
  • aou-2.1.17
  • aou-2.1.18
  • aou-2.1.19
  • aou-2.1.2
  • aou-2.1.20
  • aou-2.1.21
  • aou-2.1.22
  • aou-2.1.23
  • aou-2.1.24
  • aou-2.1.25
  • aou-2.1.26
  • aou-2.1.27
  • aou-2.1.28
  • aou-2.1.29
  • aou-2.1.3
  • aou-2.1.30
  • aou-2.1.31
  • aou-2.1.32
  • aou-2.1.33
  • aou-2.1.34
  • aou-2.1.4
  • aou-2.1.5
  • aou-2.1.6
  • aou-2.1.7
152 results
Show changes
......@@ -29,6 +29,9 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import ch.unige.aou.business.PersonService;
import ch.unige.aou.business.UserService;
import ch.unige.aou.model.security.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
......@@ -37,6 +40,8 @@ import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -74,17 +79,23 @@ public class UpdateMetadataController extends IndexDataSearchController<Publicat
private final IndexResourceService<String, PublicationIndexEntry> indexResourceService;
private final UpdateMetadataService updateMetadataService;
private final PersonService personService;
private final UserService userService;
private final String indexPublishedPublications;
private final String exportDataUrl;
public UpdateMetadataController(IndexResourceService<String, PublicationIndexEntry> indexResourceService,
IndexingService<PublicationIndexEntry> indexingService,
IndexFieldAliasInfoProvider indexFieldAliasInfoProvider, UpdateMetadataService updateMetadataService, AouProperties aouProperties) {
IndexingService<PublicationIndexEntry> indexingService, IndexFieldAliasInfoProvider indexFieldAliasInfoProvider,
UpdateMetadataService updateMetadataService, AouProperties aouProperties, PersonService personService,
UserService userService) {
super(indexingService, indexFieldAliasInfoProvider);
this.indexResourceService = indexResourceService;
this.indexPublishedPublications = aouProperties.getIndexing().getPublishedPublicationsIndexName();
this.updateMetadataService = updateMetadataService;
this.exportDataUrl = aouProperties.getParameters().getExportDataUrlTemplate();
this.personService = personService;
this.userService = userService;
}
@PostMapping(AouActionName.EXPORT)
......@@ -129,7 +140,10 @@ public class UpdateMetadataController extends IndexDataSearchController<Publicat
@PostMapping(AouActionName.IMPORT)
public ResponseEntity<Void> importPublicationsMetadata(@RequestBody String metadata) {
this.updateMetadataService.importPublications(metadata);
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
final User userImporting = this.userService.findByExternalUid(authentication.getName());
this.updateMetadataService.importPublications(metadata, userImporting);
return new ResponseEntity<>(HttpStatus.OK);
}
......
......@@ -34,6 +34,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import ch.unige.aou.model.security.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
......@@ -65,7 +66,6 @@ public class UpdateMetadataService {
private static final Logger log = LoggerFactory.getLogger(UpdateMetadataService.class);
private final String exportFolder;
private final String[] emailsToSendBatchCorrectionNotifications;
private final Integer numberOfErrorsToSendForEmailOfBatchCorrections;
private final PublicationService publicationService;
private final MetadataService metadataService;
......@@ -78,7 +78,6 @@ public class UpdateMetadataService {
this.metadataService = metadataService;
this.publicationsAdapter = publicationsAdapter;
this.exportFolder = aouProperties.getExportPublicationsFolder();
this.emailsToSendBatchCorrectionNotifications = aouProperties.getBatchCorrections().getEmailsToSendNotifications();
this.numberOfErrorsToSendForEmailOfBatchCorrections = aouProperties.getBatchCorrections().getNumberOfErrorToSendForEmail();
this.tempFolder = aouProperties.getTempLocation(aouProperties.getPublicationsFolder());
}
......@@ -119,29 +118,29 @@ public class UpdateMetadataService {
@Transactional
@Async
public void importPublications(String xmlString) {
public void importPublications(String xmlString, User userImporting) {
// First validate xml and validation rules for each publication
// In case of errors, they should be sent by email
try {
Map<String, String> publicationsErrors = this.verifyPublicationsFromXml(xmlString);
if (!publicationsErrors.isEmpty()) {
this.sendEmailWithListError(publicationsErrors);
this.sendEmailWithListError(publicationsErrors, userImporting.getEmail());
log.info("Email with {} validation errors has been send", publicationsErrors.size());
return;
}
// Change each metadata from publications and save them
int total = this.updatePublicationsMetadata(xmlString);
this.sendEmailWithListPublicationsUpdated(total);
int total = this.updatePublicationsMetadata(xmlString, userImporting.getExternalUid());
this.sendEmailWithListPublicationsUpdated(total, userImporting.getEmail());
log.info("Email with {} publication changed", total);
} catch (IOException | SolidifyRuntimeException e) {
this.sendEmailWithExceptionMessage(String.valueOf(e.getCause()));
this.sendEmailWithExceptionMessage(String.valueOf(e.getCause()), userImporting.getEmail());
log.info("Exception error:" + e.getMessage());
log.info("Email with validation error from xml {}", String.valueOf(e.getCause()));
}
}
private int updatePublicationsMetadata(String xmlString) {
private int updatePublicationsMetadata(String xmlString, String personImporting) {
final MetadataExtractor metadataExtractor = this.metadataService.getMetadataExtractor(AouMetadataVersion.getDefaultVersion());
Publications publications = this.publicationsAdapter.createPublicationsFromXml(xmlString);
for (ch.unige.aou.model.xml.list_deposits.Publication publicationXml : publications.getPublication()) {
......@@ -149,6 +148,7 @@ public class UpdateMetadataService {
Publication.PublicationStatus currentStatus = publication.getStatus();
String publicationMetadata = metadataExtractor.serializeDepositDocToXml(publicationXml.getDepositDoc());
publication.setMetadata(publicationMetadata);
publication.getLastUpdate().setWho(personImporting);
switch (currentStatus) {
case COMPLETED -> {
......@@ -209,28 +209,27 @@ public class UpdateMetadataService {
return validationErrors;
}
private void sendEmailWithExceptionMessage(String exceptionMessage) {
private void sendEmailWithExceptionMessage(String exceptionMessage, String email) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("exception", exceptionMessage);
this.sendEmailWithParameters(parameters);
this.sendEmailWithParameters(parameters, email);
}
private void sendEmailWithListError(Map<String, String> listErrors) {
private void sendEmailWithListError(Map<String, String> listErrors, String email) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("listError", listErrors);
this.sendEmailWithParameters(parameters);
this.sendEmailWithParameters(parameters, email);
}
private void sendEmailWithListPublicationsUpdated(int total) {
private void sendEmailWithListPublicationsUpdated(int total, String email) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("total", total);
this.sendEmailWithParameters(parameters);
this.sendEmailWithParameters(parameters, email);
}
public void sendEmailWithParameters(Map<String, Object> parameters) {
for (String emailTo : this.emailsToSendBatchCorrectionNotifications) {
public void sendEmailWithParameters(Map<String, Object> parameters, String email) {
SolidifyEventPublisher.getPublisher().publishEvent(
new EmailMessage(emailTo, EmailMessage.EmailTemplate.BATCH_UPDATES_REPORT, parameters));
}
new EmailMessage(email, EmailMessage.EmailTemplate.BATCH_UPDATES_REPORT, parameters));
}
}
......@@ -47,6 +47,7 @@ import ch.unige.aou.config.AouProperties;
import ch.unige.aou.controller.AdminController;
import ch.unige.aou.model.ExistingPublicationInfo;
import ch.unige.aou.model.index.PublicationIndexEntry;
import ch.unige.aou.model.publication.Publication;
import ch.unige.aou.model.rest.AouSearchCondition;
@Service
......@@ -222,6 +223,14 @@ public class DuplicateService {
notSamePublicationCondition.setValue(publicationId);
conditionList.add(notSamePublicationCondition);
// Do not find publications that are DELETED
AouSearchCondition deletedPublicationCondition = new AouSearchCondition();
deletedPublicationCondition.setType(SearchConditionType.TERM);
deletedPublicationCondition.setBooleanClauseType(BooleanClauseType.MUST_NOT);
deletedPublicationCondition.setField(AouConstants.INDEX_FIELD_STATUS);
deletedPublicationCondition.getTerms().add(Publication.PublicationStatus.DELETED.toString());
conditionList.add(deletedPublicationCondition);
FacetPage<PublicationIndexEntry> results = this.indexResourceService.search(this.indexPublicationsInProgressName,
conditionList.stream().map(SearchCondition.class::cast).collect(Collectors.toList()), null, pageable);
if (results.getTotalElements() > 0) {
......
......@@ -402,6 +402,7 @@ public class AouConstants {
public static final String INDEX_FIELD_ARCHIVE_ID = "archiveId";
public static final String INDEX_FIELD_ARCHIVE_ID_INT = "archiveIdInt";
public static final String INDEX_FIELD_FIRST_VALIDATION_DATE = "technicalInfos.firstValidation";
public static final String INDEX_FIELD_STATUS = "technicalInfos.status";
public static final String INDEX_FIELD_FULLTEXTS = "fulltexts";
public static final String INDEX_FIELD_XML = "aou.xml";
public static final String INDEX_FIELD_METADATA_VERSION = "metadata-version";
......