From 7f7607cdc23a6f273ae370c767ae58ec059c735b Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Mon, 31 Jan 2022 16:11:09 +0100 Subject: [PATCH 01/24] Refactoring naming convention. --- .../marketplace/controllers/tools/ToolController.java | 2 +- .../sshopencloud/marketplace/dto/tools/PaginatedTools.java | 6 +++--- .../marketplace/services/items/ToolService.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/tools/ToolController.java b/src/main/java/eu/sshopencloud/marketplace/controllers/tools/ToolController.java index 2a2cb11d..3baa7379 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/tools/ToolController.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/tools/ToolController.java @@ -32,7 +32,7 @@ public class ToolController { private final ToolService toolService; - @Operation(summary = "Retrieve all tools in pages") + @Operation(summary = "Retrieve all tools services in pages") @GetMapping(path = "", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getTools(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "perpage", required = false) Integer perpage, diff --git a/src/main/java/eu/sshopencloud/marketplace/dto/tools/PaginatedTools.java b/src/main/java/eu/sshopencloud/marketplace/dto/tools/PaginatedTools.java index bab42c30..1fd38871 100644 --- a/src/main/java/eu/sshopencloud/marketplace/dto/tools/PaginatedTools.java +++ b/src/main/java/eu/sshopencloud/marketplace/dto/tools/PaginatedTools.java @@ -15,11 +15,11 @@ import java.util.List; @AllArgsConstructor public class PaginatedTools extends PaginatedResult { - private List tools; + private List toolsServices; @Override - @JsonGetter("tools") + @JsonGetter("toolsServices") public List getResults() { - return tools; + return toolsServices; } } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java index 0b434cfa..19a17ea2 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java @@ -119,7 +119,7 @@ public class ToolService extends ItemCrudService toolsPage, List tools) { - return PaginatedTools.builder().tools(tools) + return PaginatedTools.builder().toolsServices(tools) .count(toolsPage.getContent().size()) .hits(toolsPage.getTotalElements()) .page(toolsPage.getNumber() + 1) -- GitLab From 97d34de42dc96f8c1f8c5d57a7a8121292cdbe14 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Mon, 31 Jan 2022 16:29:00 +0100 Subject: [PATCH 02/24] Refactoring naming convention once again --- .../sshopencloud/marketplace/dto/tools/PaginatedTools.java | 6 +++--- .../marketplace/services/items/ToolService.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/dto/tools/PaginatedTools.java b/src/main/java/eu/sshopencloud/marketplace/dto/tools/PaginatedTools.java index 1fd38871..bab42c30 100644 --- a/src/main/java/eu/sshopencloud/marketplace/dto/tools/PaginatedTools.java +++ b/src/main/java/eu/sshopencloud/marketplace/dto/tools/PaginatedTools.java @@ -15,11 +15,11 @@ import java.util.List; @AllArgsConstructor public class PaginatedTools extends PaginatedResult { - private List toolsServices; + private List tools; @Override - @JsonGetter("toolsServices") + @JsonGetter("tools") public List getResults() { - return toolsServices; + return tools; } } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java index 19a17ea2..0b434cfa 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java @@ -119,7 +119,7 @@ public class ToolService extends ItemCrudService toolsPage, List tools) { - return PaginatedTools.builder().toolsServices(tools) + return PaginatedTools.builder().tools(tools) .count(toolsPage.getContent().size()) .hits(toolsPage.getTotalElements()) .page(toolsPage.getNumber() + 1) -- GitLab From b6ceae6740645286e46af6ab8f8c4780607af8fd Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Tue, 1 Feb 2022 14:54:47 +0100 Subject: [PATCH 03/24] Committing progress. --- .../controllers/sources/SourceController.java | 1 + .../repositories/items/ItemRepository.java | 3 +++ .../search/IndexItemRepository.java | 2 ++ .../services/search/IndexActorService.java | 2 ++ .../services/search/IndexConceptService.java | 2 ++ .../services/search/IndexItemService.java | 23 +++++++++++++++---- .../services/sources/SourceService.java | 1 + 7 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/sources/SourceController.java b/src/main/java/eu/sshopencloud/marketplace/controllers/sources/SourceController.java index bcde7222..60f6d9a9 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/sources/SourceController.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/sources/SourceController.java @@ -61,6 +61,7 @@ public class SourceController { return ResponseEntity.ok(sourceService.updateSource(id, updatedSource)); } + //ELiza @DeleteMapping(path = "/{id}") public void deleteSource(@PathVariable("id") long id) { sourceService.deleteSource(id); diff --git a/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java b/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java index 149a0e10..9240218f 100644 --- a/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java +++ b/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java @@ -86,4 +86,7 @@ public interface ItemRepository extends ItemVersionRepository { @Query("select i from Item i inner join ItemContributor c ON c.item.id = i.id WHERE c.actor.id = :id ORDER BY i.label") List findAllByContributorsActorId(@Param("id") Long id); + @Query("select i from Item i left join VersionedItem v ON i.versionedItem = v WHERE i.status = 'APPROVED' AND i.proposedVersion = false AND v.active = true") + List findAllItemsFaster(); + } diff --git a/src/main/java/eu/sshopencloud/marketplace/repositories/search/IndexItemRepository.java b/src/main/java/eu/sshopencloud/marketplace/repositories/search/IndexItemRepository.java index 55ec84a6..da2a7c1a 100644 --- a/src/main/java/eu/sshopencloud/marketplace/repositories/search/IndexItemRepository.java +++ b/src/main/java/eu/sshopencloud/marketplace/repositories/search/IndexItemRepository.java @@ -8,4 +8,6 @@ import org.springframework.stereotype.Repository; public interface IndexItemRepository extends SolrCrudRepository { void deleteByPersistentId(String persistentId); + + } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexActorService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexActorService.java index 8897b40d..e9e789ae 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexActorService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexActorService.java @@ -24,10 +24,12 @@ public class IndexActorService { } public void reindexActors() { + log.debug("Eliza Before actor index..."); clearActorIndex(); for (Actor actor : actorRepository.findAll()) { indexActor(actor); } + log.debug("Eliza After actor index..."); } public void clearActorIndex() { diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexConceptService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexConceptService.java index d648c5a9..bfb55bd8 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexConceptService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexConceptService.java @@ -71,10 +71,12 @@ public class IndexConceptService { } public void reindexConcepts() { + log.debug("Eliza Before concept index..."); clearConceptIndex(); for (Vocabulary vocabulary : vocabularyRepository.findAll()) { indexConcepts(vocabulary); } + log.debug("Eliza After concept index..."); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java index 972c8669..ff891917 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java @@ -19,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -39,6 +40,7 @@ public class IndexItemService { public IndexItem indexItem(Item item) { + if (!(item.isNewestVersion() || item.isProposedVersion())) return null; @@ -46,19 +48,29 @@ public class IndexItemService { removeItemVersions(item); List> results = sourceRepository.findDetailedSourcesOfItem(item.getPersistentId()); - List detailedSources = results.stream().map(DetailedSourceView::new) - .collect(Collectors.toList()); + List detailedSources = results.stream().map(DetailedSourceView::new).collect(Collectors.toList()); IndexItem indexedItem = IndexConverter.convertItem(item, itemRelatedItemService.countAllRelatedItems(item), detailedSources); + return indexItemRepository.save(indexedItem); } + public IndexItem indexItemAfterReindex(Item item) { + + List detailedSources = sourceRepository.findDetailedSourcesOfItem(item.getPersistentId()).stream().map(DetailedSourceView::new).collect(Collectors.toList()); + + return indexItemRepository.save(IndexConverter.convertItem(item, itemRelatedItemService.countAllRelatedItems(item), + detailedSources)); + } + public void reindexItems() { + log.debug("Eliza Before item index..."); clearItemIndex(); - for (Item item : itemRepository.findAll()) { - indexItem(item); + for (Item item : itemRepository.findAllItemsFaster()) { + indexItemAfterReindex(item); } + log.debug("Eliza After item index..."); } public void clearItemIndex() { @@ -77,7 +89,7 @@ public class IndexItemService { - + //TODO - source changed therefore reindex only changes items @Async @TransactionalEventListener(classes = {SourceChangedEvent.class}, phase = TransactionPhase.AFTER_COMMIT) public void handleChangedSource(SourceChangedEvent event) { @@ -90,6 +102,7 @@ public class IndexItemService { } } + //TODO - actor changed therefore reindex only changes items @Async @TransactionalEventListener(classes = {ActorChangedEvent.class}, phase = TransactionPhase.AFTER_COMMIT) public void handleChangedActor(ActorChangedEvent event) { diff --git a/src/main/java/eu/sshopencloud/marketplace/services/sources/SourceService.java b/src/main/java/eu/sshopencloud/marketplace/services/sources/SourceService.java index 7931b8dd..3444a69b 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/sources/SourceService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/sources/SourceService.java @@ -84,6 +84,7 @@ public class SourceService { return SourceMapper.INSTANCE.toDto(source); } + //Eliza public void deleteSource(Long id) { if (!sourceRepository.existsById(id)) { throw new EntityNotFoundException("Unable to find " + Source.class.getName() + " with id " + id); -- GitLab From f57bc73a64ce1be6c8ee39ed0ab9d6353993755a Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Tue, 1 Feb 2022 15:31:09 +0100 Subject: [PATCH 04/24] Adding 'unaltered' string constant that will show for nullable single field if no changes has been made. --- .../datasets/DatasetController.java | 4 +- .../publications/PublicationController.java | 4 +- .../controllers/tools/ToolController.java | 4 +- .../trainings/TrainingMaterialController.java | 4 +- .../workflows/WorkflowController.java | 8 ++-- .../services/items/ItemsComparator.java | 47 +++++++------------ 6 files changed, 29 insertions(+), 42 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/datasets/DatasetController.java b/src/main/java/eu/sshopencloud/marketplace/controllers/datasets/DatasetController.java index c4cfdddf..7800c33a 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/datasets/DatasetController.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/datasets/DatasetController.java @@ -157,7 +157,7 @@ public class DatasetController { return ResponseEntity.ok(datasetService.getSources(persistentId)); } - @Operation(summary = "Getting differences between dataset and target version of item", operationId = "getDatasetAndVersionedItemDifferences") + @Operation(summary = "Getting differences between dataset and target version of item, ('unaltered' string response means for the single field that remained unchanged)", operationId = "getDatasetAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getDatasetVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @RequestParam(required = true) String with, @@ -167,7 +167,7 @@ public class DatasetController { } - @Operation(summary = "Getting differences between target version of dataset and target version of item", operationId = "getVersionedDatasetAndVersionedItemDifferences") + @Operation(summary = "Getting differences between target version of dataset and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getVersionedDatasetAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/versions/{versionId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getVersionedDatasetVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @PathVariable("versionId") long versionId, diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/publications/PublicationController.java b/src/main/java/eu/sshopencloud/marketplace/controllers/publications/PublicationController.java index c7cd400f..2e0c3bdb 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/publications/PublicationController.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/publications/PublicationController.java @@ -158,7 +158,7 @@ public class PublicationController { } - @Operation(summary = "Getting differences between publication and target version of item", operationId = "getPublicationAndVersionedItemDifferences") + @Operation(summary = "Getting differences between publication and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getPublicationAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getPublicationVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @RequestParam(required = true) String with, @@ -168,7 +168,7 @@ public class PublicationController { } - @Operation(summary = "Getting differences between target version of publication and target version of item", operationId = "getVersionedPublicationAndVersionedItemDifferences") + @Operation(summary = "Getting differences between target version of publication and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getVersionedPublicationAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/versions/{versionId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getVersionedPublicationVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @PathVariable("versionId") long versionId, diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/tools/ToolController.java b/src/main/java/eu/sshopencloud/marketplace/controllers/tools/ToolController.java index 3baa7379..6b739bfd 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/tools/ToolController.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/tools/ToolController.java @@ -157,7 +157,7 @@ public class ToolController { return ResponseEntity.ok(toolService.getSources(persistentId)); } - @Operation(summary = "Getting differences between tool and target version of item", operationId = "getToolAndVersionedItemDifferences") + @Operation(summary = "Getting differences between tool and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getToolAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getToolVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @RequestParam(required = true) String with, @@ -167,7 +167,7 @@ public class ToolController { } - @Operation(summary = "Getting differences between target version of tool and target version of item", operationId = "getVersionedToolAndVersionedItemDifferences") + @Operation(summary = "Getting differences between target version of tool and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getVersionedToolAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/versions/{versionId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getVersionedToolVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @PathVariable("versionId") long versionId, diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/trainings/TrainingMaterialController.java b/src/main/java/eu/sshopencloud/marketplace/controllers/trainings/TrainingMaterialController.java index 97405ba2..92f5c260 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/trainings/TrainingMaterialController.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/trainings/TrainingMaterialController.java @@ -161,7 +161,7 @@ public class TrainingMaterialController { return ResponseEntity.ok(trainingMaterialService.getSources(persistentId)); } - @Operation(summary = "Getting differences between training material and target version of item", operationId = "getTrainingMaterialAndVersionedItemDifferences") + @Operation(summary = "Getting differences between training material and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getTrainingMaterialAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getTrainingMaterialVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @RequestParam(required = true) String with, @@ -171,7 +171,7 @@ public class TrainingMaterialController { } - @Operation(summary = "Getting differences between target version of training material and target version of item", operationId = "getVersionedTrainingMaterialAndVersionedItemDifferences") + @Operation(summary = "Getting differences between target version of training material and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getVersionedTrainingMaterialAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/versions/{versionId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getVersionedTrainingMaterialVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @PathVariable("versionId") long versionId, diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/workflows/WorkflowController.java b/src/main/java/eu/sshopencloud/marketplace/controllers/workflows/WorkflowController.java index 9a270384..d760c5ce 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/workflows/WorkflowController.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/workflows/WorkflowController.java @@ -297,7 +297,7 @@ public class WorkflowController { return ResponseEntity.ok(stepService.getSources(workflowPersistentId, stepPersistentId)); } - @Operation(summary = "Getting differences between workflow and target version of item", operationId = "getWorkflowAndVersionedItemDifferences") + @Operation(summary = "Getting differences between workflow and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getWorkflowAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getWorkflowVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @RequestParam(required = true) String with, @@ -307,7 +307,7 @@ public class WorkflowController { } - @Operation(summary = "Getting differences between target version of workflow and target version of item", operationId = "getVersionedWorkflowAndVersionedItemDifferences") + @Operation(summary = "Getting differences between target version of workflow and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getVersionedWorkflowAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/versions/{versionId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getVersionedWorkflowVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @PathVariable("versionId") long versionId, @@ -318,7 +318,7 @@ public class WorkflowController { } - @Operation(summary = "Getting differences between step and target version of item", operationId = "getStepAndVersionedItemDifferences") + @Operation(summary = "Getting differences between step and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getStepAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/steps/{stepPersistentId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getStepVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @PathVariable("stepPersistentId") String stepPersistentId, @@ -329,7 +329,7 @@ public class WorkflowController { } - @Operation(summary = "Getting differences between target version of step and target version of item", operationId = "getVersionedStepAndVersionedItemDifferences") + @Operation(summary = "Getting differences between target version of step and target version of item ('unaltered' string response means for the single field that remained unchanged)", operationId = "getVersionedStepAndVersionedItemDifferences") @GetMapping(path = "/{persistentId}/steps/{stepPersistentId}/versions/{versionId}/diff", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getVersionedStepVersionedItemDifferences(@PathVariable("persistentId") String persistentId, @PathVariable("stepPersistentId") String stepPersistentId, diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java index ae7f2e3f..eec0a1fd 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java @@ -29,6 +29,7 @@ import lombok.experimental.UtilityClass; @UtilityClass public class ItemsComparator { + public static final String notChangedField= "unaltered"; @SuppressWarnings(value = "rawtypes") public ItemsDifferencesDto differentiateItems(ItemDto item, ItemDto other) { ItemsDifferencesDto differences = createItemsDifferenceDto(item, other); @@ -119,11 +120,11 @@ public class ItemsComparator { } } - + //Eliza private void differentiateVersions(ItemDto item, ItemDto other, ItemsDifferencesDto differences) { if (item.getVersion() != null) { if (item.getVersion().equals(other.getVersion())) - other.setVersion(null); + other.setVersion(notChangedField); else differences.setEqual(false); } else { @@ -164,12 +165,10 @@ public class ItemsComparator { } } - + //Eliza private void differentiateSources(ItemDto item, ItemDto other, ItemsDifferencesDto differences) { if (item.getSource() != null) { - if (item.getSource().equals(other.getSource())) - other.setSource(null); - else + if (!item.getSource().equals(other.getSource())) differences.setEqual(false); } else { if (other.getSource() != null) @@ -178,7 +177,7 @@ public class ItemsComparator { if (item.getSourceItemId() != null) { if (item.getSourceItemId().equals(other.getSourceItemId())) - other.setSourceItemId(null); + other.setSourceItemId(notChangedField); else differences.setEqual(false); } else { @@ -345,26 +344,18 @@ public class ItemsComparator { } private boolean arePropertiesEqual(PropertyCore propertyCore, PropertyDto propertyDto) { - if ((propertyCore.getType().getCode().equals(propertyDto.getType().getCode())) + return (propertyCore.getType().getCode().equals(propertyDto.getType().getCode())) && ((propertyCore.getValue() != null && propertyCore.getValue().equals(propertyDto.getValue())) - || (propertyCore.getValue() == null && propertyDto.getValue() == null)) - && (areConceptsEqual(propertyCore.getConcept(), propertyDto.getConcept()))) { - return true; - } else { - return false; - } + || (propertyCore.getValue() == null && propertyDto.getValue() == null)) + && (areConceptsEqual(propertyCore.getConcept(), propertyDto.getConcept())); } private boolean areConceptsEqual(ConceptId conceptId, ConceptBasicDto conceptDto) { - if ((conceptId == null && conceptDto == null) - || ( - (conceptId != null && conceptId.getCode() != null && conceptId.getCode().equals(conceptDto.getCode())) - && (conceptId != null && conceptId.getVocabulary() != null && conceptId.getVocabulary().getCode() != null && conceptId.getVocabulary().getCode().equals(conceptDto.getVocabulary().getCode())) - && (conceptId != null && conceptId.getUri() != null && conceptId.getUri().equals(conceptDto.getUri())))) { - return true; - } else { - return false; - } + return (conceptId == null && conceptDto == null) + || ( + (conceptId != null && conceptId.getCode() != null && conceptId.getCode().equals(conceptDto.getCode())) + && (conceptId != null && conceptId.getVocabulary() != null && conceptId.getVocabulary().getCode() != null && conceptId.getVocabulary().getCode().equals(conceptDto.getVocabulary().getCode())) + && (conceptId != null && conceptId.getUri() != null && conceptId.getUri().equals(conceptDto.getUri()))); } @@ -467,14 +458,10 @@ public class ItemsComparator { } private boolean areMediaEqual(ItemMediaCore itemMediaCore, ItemMediaDto itemMediaDto) { - if (itemMediaCore.getInfo().getMediaId().equals(itemMediaDto.getInfo().getMediaId()) - && ((itemMediaCore.getCaption() != null && itemMediaCore.getCaption().equals(itemMediaDto.getCaption())) + return itemMediaCore.getInfo().getMediaId().equals(itemMediaDto.getInfo().getMediaId()) + && ((itemMediaCore.getCaption() != null && itemMediaCore.getCaption().equals(itemMediaDto.getCaption())) || (itemMediaCore.getCaption() == null && itemMediaDto.getCaption() == null)) - && (areConceptsEqual(itemMediaCore.getConcept(), itemMediaDto.getConcept()))) { - return true; - } else { - return false; - } + && (areConceptsEqual(itemMediaCore.getConcept(), itemMediaDto.getConcept())); } -- GitLab From 2520973dd644a0bb7aa5bde758bd95531166078f Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Wed, 2 Feb 2022 15:10:36 +0100 Subject: [PATCH 05/24] Solr reindexing improvement. --- .../marketplace/controllers/actors/ActorController.java | 1 - .../marketplace/services/actors/ActorService.java | 3 ++- .../marketplace/services/search/IndexActorService.java | 4 ++-- .../marketplace/services/search/IndexConceptService.java | 4 ++-- .../marketplace/services/search/IndexItemService.java | 9 +++------ .../marketplace/services/sources/SourceService.java | 3 --- 6 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/actors/ActorController.java b/src/main/java/eu/sshopencloud/marketplace/controllers/actors/ActorController.java index f76108a1..6e067b15 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/actors/ActorController.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/actors/ActorController.java @@ -5,7 +5,6 @@ import eu.sshopencloud.marketplace.dto.actors.ActorCore; import eu.sshopencloud.marketplace.dto.actors.ActorDto; import eu.sshopencloud.marketplace.dto.actors.ActorHistoryDto; import eu.sshopencloud.marketplace.dto.actors.PaginatedActors; -import eu.sshopencloud.marketplace.dto.items.ItemBasicDto; import eu.sshopencloud.marketplace.services.actors.ActorService; import eu.sshopencloud.marketplace.validators.PageCoordsValidator; import io.swagger.v3.oas.annotations.Operation; diff --git a/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java b/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java index ee140da2..13acbe68 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java @@ -102,7 +102,8 @@ public class ActorService { actorRepository.deleteById(id); indexActorService.removeActor(id); - eventPublisher.publishEvent(new ActorChangedEvent(id, true)); + //TODO - rethink + // eventPublisher.publishEvent(new ActorChangedEvent(id, true)); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexActorService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexActorService.java index e9e789ae..fdc63ce9 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexActorService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexActorService.java @@ -24,12 +24,12 @@ public class IndexActorService { } public void reindexActors() { - log.debug("Eliza Before actor index..."); + log.debug("Before actor reindex."); clearActorIndex(); for (Actor actor : actorRepository.findAll()) { indexActor(actor); } - log.debug("Eliza After actor index..."); + log.debug("After actor index."); } public void clearActorIndex() { diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexConceptService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexConceptService.java index bfb55bd8..c501a424 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexConceptService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexConceptService.java @@ -71,12 +71,12 @@ public class IndexConceptService { } public void reindexConcepts() { - log.debug("Eliza Before concept index..."); + log.debug("Before concept index."); clearConceptIndex(); for (Vocabulary vocabulary : vocabularyRepository.findAll()) { indexConcepts(vocabulary); } - log.debug("Eliza After concept index..."); + log.debug("After concept index."); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java index ff891917..8574667c 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java @@ -65,19 +65,19 @@ public class IndexItemService { } public void reindexItems() { - log.debug("Eliza Before item index..."); + log.debug("Before item reindex."); clearItemIndex(); for (Item item : itemRepository.findAllItemsFaster()) { indexItemAfterReindex(item); } - log.debug("Eliza After item index..."); + log.debug("After item reindex."); } public void clearItemIndex() { indexItemRepository.deleteAll(); } - + //Eliza public void removeItemVersions(Item item) { indexItemRepository.deleteByPersistentId(item.getPersistentId()); } @@ -88,8 +88,6 @@ public class IndexItemService { } - - //TODO - source changed therefore reindex only changes items @Async @TransactionalEventListener(classes = {SourceChangedEvent.class}, phase = TransactionPhase.AFTER_COMMIT) public void handleChangedSource(SourceChangedEvent event) { @@ -102,7 +100,6 @@ public class IndexItemService { } } - //TODO - actor changed therefore reindex only changes items @Async @TransactionalEventListener(classes = {ActorChangedEvent.class}, phase = TransactionPhase.AFTER_COMMIT) public void handleChangedActor(ActorChangedEvent event) { diff --git a/src/main/java/eu/sshopencloud/marketplace/services/sources/SourceService.java b/src/main/java/eu/sshopencloud/marketplace/services/sources/SourceService.java index 3444a69b..8d117f55 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/sources/SourceService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/sources/SourceService.java @@ -84,14 +84,11 @@ public class SourceService { return SourceMapper.INSTANCE.toDto(source); } - //Eliza public void deleteSource(Long id) { if (!sourceRepository.existsById(id)) { throw new EntityNotFoundException("Unable to find " + Source.class.getName() + " with id " + id); } sourceRepository.deleteById(id); - - eventPublisher.publishEvent(new SourceChangedEvent(id, true)); } private Sort.Order getSortOrderBySourceOrder(SourceOrder sourceOrder) { -- GitLab From 019f8cbcaf83a4dedceadfb73549ca509fbc4942 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Thu, 3 Feb 2022 12:25:45 +0100 Subject: [PATCH 06/24] Changes to diff. --- .../services/items/ItemsComparator.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java index eec0a1fd..be56f59c 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java @@ -29,7 +29,8 @@ import lombok.experimental.UtilityClass; @UtilityClass public class ItemsComparator { - public static final String notChangedField= "unaltered"; + public static final String notChangedField = "unaltered"; + @SuppressWarnings(value = "rawtypes") public ItemsDifferencesDto differentiateItems(ItemDto item, ItemDto other) { ItemsDifferencesDto differences = createItemsDifferenceDto(item, other); @@ -136,7 +137,7 @@ public class ItemsComparator { private void differentiateVersions(ItemCore item, ItemDto other, ItemDifferencesCore differences) { if (item.getVersion() != null) { if (item.getVersion().equals(other.getVersion())) - other.setVersion(null); + other.setVersion(notChangedField); else differences.setEqual(false); } else { @@ -165,10 +166,12 @@ public class ItemsComparator { } } - //Eliza + private void differentiateSources(ItemDto item, ItemDto other, ItemsDifferencesDto differences) { if (item.getSource() != null) { - if (!item.getSource().equals(other.getSource())) + if (item.getSource().equals(other.getSource())) + other.setSource(null); + else differences.setEqual(false); } else { if (other.getSource() != null) @@ -212,7 +215,7 @@ public class ItemsComparator { for (i = 0; i < itemSize; i++) { if (i < otherSize) { if (item.getContributors().get(i).getActor().getId().equals(other.getContributors().get(i).getActor().getId()) - && item.getContributors().get(i).getRole().getCode().equals(other.getContributors().get(i).getRole().getCode())) { + && item.getContributors().get(i).getRole().getCode().equals(other.getContributors().get(i).getRole().getCode())) { other.getContributors().set(i, null); } else { differences.setEqual(false); @@ -291,7 +294,7 @@ public class ItemsComparator { for (i = 0; i < itemSize; i++) { if (i < otherSize) { if (item.getExternalIds().get(i).getIdentifierService().getCode().equals(other.getExternalIds().get(i).getIdentifierService().getCode()) - && item.getExternalIds().get(i).getIdentifier().equals(other.getExternalIds().get(i).getIdentifier())) { + && item.getExternalIds().get(i).getIdentifier().equals(other.getExternalIds().get(i).getIdentifier())) { other.getExternalIds().set(i, null); } else { differences.setEqual(false); @@ -385,7 +388,7 @@ public class ItemsComparator { for (i = 0; i < itemSize; i++) { if (i < otherSize) { if (item.getRelatedItems().get(i).getPersistentId().equals(other.getRelatedItems().get(i).getPersistentId()) - && item.getRelatedItems().get(i).getRelation().getCode().equals(other.getRelatedItems().get(i).getRelation().getCode())) { + && item.getRelatedItems().get(i).getRelation().getCode().equals(other.getRelatedItems().get(i).getRelation().getCode())) { other.getRelatedItems().set(i, null); } else { differences.setEqual(false); -- GitLab From a130f115d4e91e08df97cb40111d5cce0d70eb8b Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Thu, 3 Feb 2022 12:28:09 +0100 Subject: [PATCH 07/24] Changes to diff part 2. --- .../sshopencloud/marketplace/services/items/ItemsComparator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java index be56f59c..ad62cbea 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java @@ -121,7 +121,6 @@ public class ItemsComparator { } } - //Eliza private void differentiateVersions(ItemDto item, ItemDto other, ItemsDifferencesDto differences) { if (item.getVersion() != null) { if (item.getVersion().equals(other.getVersion())) -- GitLab From 71f70f84a927e7e95911054b37c56d5f1a8eb24b Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Fri, 4 Feb 2022 11:24:49 +0100 Subject: [PATCH 08/24] Changes in repository query. --- .../marketplace/repositories/items/ItemRepository.java | 4 ++-- .../marketplace/services/search/IndexItemService.java | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java b/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java index 9240218f..d4d14ba9 100644 --- a/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java +++ b/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java @@ -86,7 +86,7 @@ public interface ItemRepository extends ItemVersionRepository { @Query("select i from Item i inner join ItemContributor c ON c.item.id = i.id WHERE c.actor.id = :id ORDER BY i.label") List findAllByContributorsActorId(@Param("id") Long id); - @Query("select i from Item i left join VersionedItem v ON i.versionedItem = v WHERE i.status = 'APPROVED' AND i.proposedVersion = false AND v.active = true") - List findAllItemsFaster(); + @Query("select i from Item i left join VersionedItem v ON i.versionedItem = v WHERE (i.status = 'APPROVED' AND v.active = true) OR (i.proposedVersion = true AND v.active = true)") + List findAllItemsToReindex(); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java index af170f6e..b5603b1c 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/IndexItemService.java @@ -41,8 +41,9 @@ public class IndexItemService { public IndexItem indexItem(Item item) { - if (!(item.isNewestVersion() || item.isProposedVersion())) + if (!item.isNewestVersion() && !item.isProposedVersion()) { return null; + } if (item.isNewestVersion()) removeItemVersions(item); @@ -64,10 +65,11 @@ public class IndexItemService { detailedSources)); } + public void reindexItems() { log.debug("Before item reindex."); clearItemIndex(); - for (Item item : itemRepository.findAllItemsFaster()) { + for (Item item : itemRepository.findAllItemsToReindex()) { indexItemAfterReindex(item); } log.debug("After item reindex."); -- GitLab From c6ba78c4cab314431d2678d9190cc9e327e31c64 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Mon, 7 Feb 2022 15:25:03 +0100 Subject: [PATCH 09/24] Display actor email only for moderator and administrator --- .../services/actors/ActorHistoryService.java | 15 +++++++++++---- .../services/actors/ActorService.java | 18 ++++++++++++++---- .../services/items/DatasetService.java | 9 +++++++-- .../services/items/PublicationService.java | 11 +++++++++-- .../services/items/StepService.java | 11 ++++++++--- .../services/items/ToolService.java | 11 +++++++++-- .../items/TrainingMaterialService.java | 11 +++++++++-- .../services/items/WorkflowService.java | 7 ++++++- 8 files changed, 73 insertions(+), 20 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorHistoryService.java b/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorHistoryService.java index cf38a333..ffcc6acb 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorHistoryService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorHistoryService.java @@ -7,6 +7,7 @@ import eu.sshopencloud.marketplace.mappers.actors.ActorHistoryMapper; import eu.sshopencloud.marketplace.model.actors.Actor; import eu.sshopencloud.marketplace.model.actors.ActorHistory; import eu.sshopencloud.marketplace.repositories.actors.ActorHistoryRepository; +import eu.sshopencloud.marketplace.services.auth.LoggedInUserHolder; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,7 +23,7 @@ public class ActorHistoryService { private final ActorHistoryRepository actorHistoryRepository; - public ActorHistory createActorHistory(Actor actor, Actor mergeActor){ + public ActorHistory createActorHistory(Actor actor, Actor mergeActor) { Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setPrettyPrinting().create(); String jsonHistoryString = gson.toJson(mergeActor); @@ -39,9 +40,15 @@ public class ActorHistoryService { } - public List findHistory(Actor actor){ + public List findHistory(Actor actor) { List history = actorHistoryRepository.findActorHistoryByActor(actor); - if(history==null) return new ArrayList<>(); - else return ActorHistoryMapper.INSTANCE.toDto(history); + if (history == null) { + return new ArrayList<>(); + } else { + List actorHistoryDtos = ActorHistoryMapper.INSTANCE.toDto(history); + if (!LoggedInUserHolder.getLoggedInUser().isModerator()) + actorHistoryDtos.forEach(actorHistoryDto -> actorHistoryDto.getActor().setEmail(null)); + return actorHistoryDtos; + } } } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java b/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java index 13acbe68..16dabd1c 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java @@ -11,6 +11,7 @@ import eu.sshopencloud.marketplace.model.actors.Actor; import eu.sshopencloud.marketplace.model.actors.ActorExternalId; import eu.sshopencloud.marketplace.repositories.actors.ActorRepository; import eu.sshopencloud.marketplace.services.actors.event.ActorChangedEvent; +import eu.sshopencloud.marketplace.services.auth.LoggedInUserHolder; import eu.sshopencloud.marketplace.services.items.ItemsService; import eu.sshopencloud.marketplace.services.search.IndexActorService; import eu.sshopencloud.marketplace.validators.actors.ActorFactory; @@ -52,6 +53,8 @@ public class ActorService { List actors = actorsPage.stream().map(ActorMapper.INSTANCE::toDto).collect(Collectors.toList()); + if(!LoggedInUserHolder.getLoggedInUser().isModerator()) actors.forEach(actorDto -> actorDto.setEmail(null)); + return PaginatedActors.builder().actors(actors).count(actorsPage.getContent().size()) .hits(actorsPage.getTotalElements()).page(pageCoords.getPage()).perpage(pageCoords.getPerpage()) .pages(actorsPage.getTotalPages()).build(); @@ -69,6 +72,7 @@ public class ActorService { if (items) { actorDto.setItems(getItemsByActor(id)); } + if (!LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); return actorDto; } @@ -77,7 +81,9 @@ public class ActorService { Actor actor = actorFactory.create(actorCore, null); actorRepository.save(actor); indexActorService.indexActor(actor); - return ActorMapper.INSTANCE.toDto(actor); + ActorDto actorDto = ActorMapper.INSTANCE.toDto(actor); + if (!LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); + return actorDto; } @@ -91,7 +97,9 @@ public class ActorService { eventPublisher.publishEvent(new ActorChangedEvent(id, false)); - return ActorMapper.INSTANCE.toDto(actor); + ActorDto actorDto = ActorMapper.INSTANCE.toDto(actor); + if (!LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); + return actorDto; } @@ -103,7 +111,7 @@ public class ActorService { indexActorService.removeActor(id); //TODO - rethink - // eventPublisher.publishEvent(new ActorChangedEvent(id, true)); + // eventPublisher.publishEvent(new ActorChangedEvent(id, true)); } @@ -146,7 +154,9 @@ public class ActorService { with.forEach(this::deleteActor); - return ActorMapper.INSTANCE.toDto(actor); + ActorDto actorDto = ActorMapper.INSTANCE.toDto(actor); + if (!LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); + return actorDto; } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java index 6ddbda0c..75220400 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java @@ -16,6 +16,7 @@ import eu.sshopencloud.marketplace.repositories.items.DatasetRepository; import eu.sshopencloud.marketplace.repositories.items.DraftItemRepository; import eu.sshopencloud.marketplace.repositories.items.ItemRepository; import eu.sshopencloud.marketplace.repositories.items.VersionedItemRepository; +import eu.sshopencloud.marketplace.services.auth.LoggedInUserHolder; import eu.sshopencloud.marketplace.services.auth.UserService; import eu.sshopencloud.marketplace.services.items.exception.ItemIsAlreadyMergedException; import eu.sshopencloud.marketplace.services.items.exception.VersionNotChangedException; @@ -139,13 +140,17 @@ public class DatasetService extends ItemCrudService Date: Tue, 8 Feb 2022 13:40:34 +0100 Subject: [PATCH 10/24] Limiting access. --- .../services/items/DatasetService.java | 18 ++++++++++++------ .../services/items/PublicationService.java | 18 ++++++++++++------ .../services/items/StepService.java | 10 ++++++++-- .../services/items/ToolService.java | 18 ++++++++++++------ .../items/TrainingMaterialService.java | 10 ++++++++-- .../services/items/WorkflowService.java | 14 +++++++++++--- .../services/search/SearchConverter.java | 18 +++++++++++++++++- .../services/search/SearchService.java | 12 +++++++++--- 8 files changed, 89 insertions(+), 29 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java index 75220400..9c90ff27 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java @@ -140,17 +140,23 @@ public class DatasetService extends ItemCrudService contributor.getActor().setEmail(null)); + } + return dto; } @Override public DatasetDto convertToDto(Item dataset) { - DatasetDto datasetDto = DatasetMapper.INSTANCE.toDto(dataset); - if(!LoggedInUserHolder.getLoggedInUser().isModerator()) datasetDto.getInformationContributor().setEmail(null); - return datasetDto; + DatasetDto dto = DatasetMapper.INSTANCE.toDto(dataset); + if(!LoggedInUserHolder.getLoggedInUser().isModerator()) { + dto.getInformationContributor().setEmail(null); + dto.getContributors().forEach(contributor -> contributor.getActor().setEmail(null)); + } + return dto; } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/PublicationService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/PublicationService.java index 07846871..aec7fb94 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/PublicationService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/PublicationService.java @@ -134,16 +134,22 @@ public class PublicationService extends ItemCrudService contributor.getActor().setEmail(null)); + } + return dto; } @Override protected PublicationDto convertToDto(Item item) { - PublicationDto publicationDto = PublicationMapper.INSTANCE.toDto(item); - if(!LoggedInUserHolder.getLoggedInUser().isModerator()) publicationDto.getInformationContributor().setEmail(null); - return publicationDto; + PublicationDto dto = PublicationMapper.INSTANCE.toDto(item); + if(!LoggedInUserHolder.getLoggedInUser().isModerator()) { + dto.getInformationContributor().setEmail(null); + dto.getContributors().forEach(contributor -> contributor.getActor().setEmail(null)); + } + return dto; } @Override diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java index 989b92d7..70f62f5d 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java @@ -433,7 +433,10 @@ public class StepService extends ItemCrudService contributor.getActor().setEmail(null)); + } return dto; } @@ -441,7 +444,10 @@ public class StepService extends ItemCrudService contributor.getActor().setEmail(null)); + } return dto; } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java index e5795222..c30797ab 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java @@ -133,16 +133,22 @@ public class ToolService extends ItemCrudService contributor.getActor().setEmail(null)); + } + return dto; } @Override protected ToolDto convertToDto(Item item) { - ToolDto toolDto = ToolMapper.INSTANCE.toDto(item); - if(!LoggedInUserHolder.getLoggedInUser().isModerator()) toolDto.getInformationContributor().setEmail(null); - return toolDto; + ToolDto dto = ToolMapper.INSTANCE.toDto(item); + if(!LoggedInUserHolder.getLoggedInUser().isModerator()){ + dto.getInformationContributor().setEmail(null); + dto.getContributors().forEach(contributor -> contributor.getActor().setEmail(null)); + } + return dto; } @Override diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/TrainingMaterialService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/TrainingMaterialService.java index 700df32a..4bdd10c6 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/TrainingMaterialService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/TrainingMaterialService.java @@ -141,14 +141,20 @@ public class TrainingMaterialService @Override protected TrainingMaterialDto convertItemToDto(TrainingMaterial trainingMaterial) { TrainingMaterialDto trainingMaterialDto = TrainingMaterialMapper.INSTANCE.toDto(trainingMaterial); - if(!LoggedInUserHolder.getLoggedInUser().isModerator()) trainingMaterialDto.getInformationContributor().setEmail(null); + if(!LoggedInUserHolder.getLoggedInUser().isModerator()){ + trainingMaterialDto.getInformationContributor().setEmail(null); + trainingMaterialDto.getContributors().forEach(contributor -> contributor.getActor().setEmail(null)); + } return trainingMaterialDto; } @Override protected TrainingMaterialDto convertToDto(Item item) { TrainingMaterialDto trainingMaterialDto = TrainingMaterialMapper.INSTANCE.toDto(item); - if(!LoggedInUserHolder.getLoggedInUser().isModerator()) trainingMaterialDto.getInformationContributor().setEmail(null); + if(!LoggedInUserHolder.getLoggedInUser().isModerator()){ + trainingMaterialDto.getInformationContributor().setEmail(null); + trainingMaterialDto.getContributors().forEach(contributor -> contributor.getActor().setEmail(null)); + } return trainingMaterialDto; } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java index 56e0c22c..0d82f49e 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java @@ -77,7 +77,7 @@ public class WorkflowService extends ItemCrudService contributor.getActor().setEmail(null)); + } + collectSteps(dto, workflow); return dto; @@ -303,7 +308,10 @@ public class WorkflowService extends ItemCrudService contributor.getActor().setEmail(null)); + } return dto; } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java index 884a7945..40f6283c 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java @@ -10,6 +10,7 @@ import eu.sshopencloud.marketplace.model.search.IndexConcept; import eu.sshopencloud.marketplace.model.search.IndexItem; import eu.sshopencloud.marketplace.model.vocabularies.PropertyType; import eu.sshopencloud.marketplace.mappers.items.ItemCategoryConverter; +import eu.sshopencloud.marketplace.services.auth.LoggedInUserHolder; import lombok.experimental.UtilityClass; import org.springframework.data.solr.core.query.result.FacetFieldEntry; @@ -44,7 +45,7 @@ public class SearchConverter { .build(); } - public SearchActor convertIndexActor(IndexActor indexActor) { + public SearchActor convertNotRestrictedIndexActor(IndexActor indexActor) { return SearchActor.builder() .id(Long.valueOf(indexActor.getId())) .name(indexActor.getName()) @@ -53,6 +54,21 @@ public class SearchConverter { .build(); } + public SearchActor convertRestrictedIndexActor(IndexActor indexActor) { + return SearchActor.builder() + .id(Long.valueOf(indexActor.getId())) + .name(indexActor.getName()) + .website(indexActor.getWebsite()) + .build(); + } + + public SearchActor convertIndexActor(IndexActor indexActor) { + if(LoggedInUserHolder.getLoggedInUser().isModerator()) return convertNotRestrictedIndexActor(indexActor); + else + return convertRestrictedIndexActor(indexActor); + + } + public LabeledCheckedCount convertCategoryFacet(FacetFieldEntry entry, List categories) { String code = entry.getValue(); ItemCategory category = ItemCategoryConverter.convertCategory(code); diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java index b0efd245..2c86bb0b 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java @@ -301,7 +301,7 @@ public class SearchService { private SearchExpressionCriteria createExpressionCriteria(String code, String expression) { - if(expression.contains("/")) expression = ClientUtils.escapeQueryChars(expression); + if (expression.contains("/")) expression = ClientUtils.escapeQueryChars(expression); PropertyType propertyType = propertyTypeService.loadPropertyTypeOrNull(code); if (propertyType != null) { @@ -322,7 +322,10 @@ public class SearchService { FacetPage facetPage = searchActorRepository.findByQueryAndFilters(queryCriteria, expressionCriteria, pageable); - PaginatedSearchActor result = PaginatedSearchActor.builder() + PaginatedSearchActor result; + + + result = PaginatedSearchActor.builder() .q(q) .actors(facetPage.get().map(SearchConverter::convertIndexActor).collect(Collectors.toList())) .hits(facetPage.getTotalElements()).count(facetPage.getNumberOfElements()) @@ -330,6 +333,7 @@ public class SearchService { .pages(facetPage.getTotalPages()) .build(); + // TODO index affiliations directly in SOLR in nested docs (?) - // TODO in a similar way add external identifiers to the result for (SearchActor searchActor : result.getActors()) { @@ -337,8 +341,10 @@ public class SearchService { searchActor.setExternalIds(ActorExternalIdMapper.INSTANCE.toDto(actor.getExternalIds())); searchActor.setAffiliations(ActorMapper.INSTANCE.toDto(actor.getAffiliations())); - } + if (!LoggedInUserHolder.getLoggedInUser().isModerator()) + searchActor.getAffiliations().forEach(affiliation -> affiliation.setEmail(null)); + } return result; } -- GitLab From 3e7fe74cda50868b8a316b23152e21102b71b71f Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Tue, 8 Feb 2022 14:33:54 +0100 Subject: [PATCH 11/24] Fixing tests. --- .../services/actors/ActorService.java | 10 +- .../services/items/DatasetService.java | 4 +- .../services/items/PublicationService.java | 4 +- .../services/items/StepService.java | 4 +- .../services/items/ToolService.java | 4 +- .../items/TrainingMaterialService.java | 4 +- .../services/items/WorkflowService.java | 4 +- .../services/search/SearchConverter.java | 5 +- .../services/search/SearchService.java | 2 +- .../actors/ActorControllerITCase.java | 37 ++++--- .../search/SearchControllerITCase.java | 98 +++++++++---------- .../VocabularyControllerITCase.java | 2 + 12 files changed, 93 insertions(+), 85 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java b/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java index 16dabd1c..9db58009 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/actors/ActorService.java @@ -53,7 +53,7 @@ public class ActorService { List actors = actorsPage.stream().map(ActorMapper.INSTANCE::toDto).collect(Collectors.toList()); - if(!LoggedInUserHolder.getLoggedInUser().isModerator()) actors.forEach(actorDto -> actorDto.setEmail(null)); + if(LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()) actors.forEach(actorDto -> actorDto.setEmail(null)); return PaginatedActors.builder().actors(actors).count(actorsPage.getContent().size()) .hits(actorsPage.getTotalElements()).page(pageCoords.getPage()).perpage(pageCoords.getPerpage()) @@ -72,7 +72,7 @@ public class ActorService { if (items) { actorDto.setItems(getItemsByActor(id)); } - if (!LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); + if (LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); return actorDto; } @@ -82,7 +82,7 @@ public class ActorService { actorRepository.save(actor); indexActorService.indexActor(actor); ActorDto actorDto = ActorMapper.INSTANCE.toDto(actor); - if (!LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); + if (LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); return actorDto; } @@ -98,7 +98,7 @@ public class ActorService { eventPublisher.publishEvent(new ActorChangedEvent(id, false)); ActorDto actorDto = ActorMapper.INSTANCE.toDto(actor); - if (!LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); + if (LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); return actorDto; } @@ -155,7 +155,7 @@ public class ActorService { with.forEach(this::deleteActor); ActorDto actorDto = ActorMapper.INSTANCE.toDto(actor); - if (!LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); + if (LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()) actorDto.setEmail(null); return actorDto; } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java index 9c90ff27..2800d26a 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/DatasetService.java @@ -141,7 +141,7 @@ public class DatasetService extends ItemCrudService contributor.getActor().setEmail(null)); } @@ -152,7 +152,7 @@ public class DatasetService extends ItemCrudService contributor.getActor().setEmail(null)); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/PublicationService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/PublicationService.java index aec7fb94..f6820020 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/PublicationService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/PublicationService.java @@ -135,7 +135,7 @@ public class PublicationService extends ItemCrudService contributor.getActor().setEmail(null)); } @@ -145,7 +145,7 @@ public class PublicationService extends ItemCrudService contributor.getActor().setEmail(null)); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java index 70f62f5d..949fe910 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java @@ -433,7 +433,7 @@ public class StepService extends ItemCrudService contributor.getActor().setEmail(null)); } @@ -444,7 +444,7 @@ public class StepService extends ItemCrudService contributor.getActor().setEmail(null)); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java index c30797ab..398a848c 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ToolService.java @@ -134,7 +134,7 @@ public class ToolService extends ItemCrudService contributor.getActor().setEmail(null)); } @@ -144,7 +144,7 @@ public class ToolService extends ItemCrudService contributor.getActor().setEmail(null)); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/TrainingMaterialService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/TrainingMaterialService.java index 4bdd10c6..fe3351fa 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/TrainingMaterialService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/TrainingMaterialService.java @@ -141,7 +141,7 @@ public class TrainingMaterialService @Override protected TrainingMaterialDto convertItemToDto(TrainingMaterial trainingMaterial) { TrainingMaterialDto trainingMaterialDto = TrainingMaterialMapper.INSTANCE.toDto(trainingMaterial); - if(!LoggedInUserHolder.getLoggedInUser().isModerator()){ + if(LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()){ trainingMaterialDto.getInformationContributor().setEmail(null); trainingMaterialDto.getContributors().forEach(contributor -> contributor.getActor().setEmail(null)); } @@ -151,7 +151,7 @@ public class TrainingMaterialService @Override protected TrainingMaterialDto convertToDto(Item item) { TrainingMaterialDto trainingMaterialDto = TrainingMaterialMapper.INSTANCE.toDto(item); - if(!LoggedInUserHolder.getLoggedInUser().isModerator()){ + if(LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()){ trainingMaterialDto.getInformationContributor().setEmail(null); trainingMaterialDto.getContributors().forEach(contributor -> contributor.getActor().setEmail(null)); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java index 0d82f49e..c53adf2a 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java @@ -294,7 +294,7 @@ public class WorkflowService extends ItemCrudService contributor.getActor().setEmail(null)); } @@ -308,7 +308,7 @@ public class WorkflowService extends ItemCrudService contributor.getActor().setEmail(null)); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java index 40f6283c..881ebfdc 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java @@ -62,10 +62,11 @@ public class SearchConverter { .build(); } + //ELiza public SearchActor convertIndexActor(IndexActor indexActor) { - if(LoggedInUserHolder.getLoggedInUser().isModerator()) return convertNotRestrictedIndexActor(indexActor); + if(LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()) return convertRestrictedIndexActor(indexActor); else - return convertRestrictedIndexActor(indexActor); + return convertNotRestrictedIndexActor(indexActor); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java index 2c86bb0b..6ad663e5 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java @@ -341,7 +341,7 @@ public class SearchService { searchActor.setExternalIds(ActorExternalIdMapper.INSTANCE.toDto(actor.getExternalIds())); searchActor.setAffiliations(ActorMapper.INSTANCE.toDto(actor.getAffiliations())); - if (!LoggedInUserHolder.getLoggedInUser().isModerator()) + if (LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()) searchActor.getAffiliations().forEach(affiliation -> affiliation.setEmail(null)); } diff --git a/src/test/java/eu/sshopencloud/marketplace/controllers/actors/ActorControllerITCase.java b/src/test/java/eu/sshopencloud/marketplace/controllers/actors/ActorControllerITCase.java index 7b293d71..e13c7429 100644 --- a/src/test/java/eu/sshopencloud/marketplace/controllers/actors/ActorControllerITCase.java +++ b/src/test/java/eu/sshopencloud/marketplace/controllers/actors/ActorControllerITCase.java @@ -72,13 +72,29 @@ public class ActorControllerITCase { .andExpect(jsonPath("id", is(actorId))) .andExpect(jsonPath("name", is("John Smith"))) .andExpect(jsonPath("website", is("https://example.com/"))) - .andExpect(jsonPath("email", is("john@example.com"))) .andExpect(jsonPath("affiliations", hasSize(1))) .andExpect(jsonPath("affiliations[0].id", is(3))) .andExpect(jsonPath("affiliations[0].name", is("SSHOC project consortium"))) .andExpect(jsonPath("affiliations[0].website", is("https://sshopencloud.eu/"))); } + @Test + public void shouldReturnActorForModerator() throws Exception { + Integer actorId = 5; + + mvc.perform(get("/api/actors/{id}", actorId) + .header("Authorization", MODERATOR_JWT) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("id", is(actorId))) + .andExpect(jsonPath("name", is("John Smith"))) + .andExpect(jsonPath("website", is("https://example.com/"))) + .andExpect(jsonPath("email", is("john@example.com"))) + .andExpect(jsonPath("affiliations", hasSize(1))) + .andExpect(jsonPath("affiliations[0].id", is(3))) + .andExpect(jsonPath("affiliations[0].name", is("SSHOC project consortium"))) + .andExpect(jsonPath("affiliations[0].website", is("https://sshopencloud.eu/"))); + } @Test public void shouldReturnActorWithItems() throws Exception { Integer actorId = 5; @@ -90,7 +106,6 @@ public class ActorControllerITCase { .andExpect(jsonPath("id", is(actorId))) .andExpect(jsonPath("name", is("John Smith"))) .andExpect(jsonPath("website", is("https://example.com/"))) - .andExpect(jsonPath("email", is("john@example.com"))) .andExpect(jsonPath("affiliations", hasSize(1))) .andExpect(jsonPath("affiliations[0].id", is(3))) .andExpect(jsonPath("affiliations[0].name", is("SSHOC project consortium"))) @@ -117,7 +132,6 @@ public class ActorControllerITCase { .andExpect(jsonPath("id", is(actorId))) .andExpect(jsonPath("name", is("John Smith"))) .andExpect(jsonPath("website", is("https://example.com/"))) - .andExpect(jsonPath("email", is("john@example.com"))) .andExpect(jsonPath("affiliations", hasSize(1))) .andExpect(jsonPath("affiliations[0].id", is(3))) .andExpect(jsonPath("affiliations[0].name", is("SSHOC project consortium"))) @@ -151,7 +165,6 @@ public class ActorControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("name", is("Test actor"))) .andExpect(jsonPath("website", is("http://www.example.org"))) - .andExpect(jsonPath("email", is("test@example.org"))) .andExpect(jsonPath("affiliations", hasSize(0))); } @@ -178,7 +191,6 @@ public class ActorControllerITCase { .header("Authorization", CONTRIBUTOR_JWT)) .andExpect(status().isOk()) .andExpect(jsonPath("name", is("Test actor"))) - .andExpect(jsonPath("email", is("test@example.org"))) .andExpect(jsonPath("affiliations", hasSize(2))) .andExpect(jsonPath("affiliations[0].name", is("Austrian Academy of Sciences"))) .andExpect(jsonPath("affiliations[1].name", is("CESSDA"))) @@ -206,7 +218,6 @@ public class ActorControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("id", notNullValue())) .andExpect(jsonPath("name", is("Test actor"))) - .andExpect(jsonPath("email", is("test@example.org"))) .andExpect(jsonPath("externalIds", hasSize(1))) .andExpect(jsonPath("externalIds[0].identifierService.code", is("DBLP"))) .andExpect(jsonPath("externalIds[0].identifierService.label", is("DBLP"))) @@ -222,7 +233,6 @@ public class ActorControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("id", is(actorDto.getId().intValue()))) .andExpect(jsonPath("name", is("Test actor"))) - .andExpect(jsonPath("email", is("test@example.org"))) .andExpect(jsonPath("externalIds", hasSize(1))) .andExpect(jsonPath("externalIds[0].identifierService.code", is("DBLP"))) .andExpect(jsonPath("externalIds[0].identifierService.label", is("DBLP"))) @@ -254,7 +264,6 @@ public class ActorControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("id", notNullValue())) .andExpect(jsonPath("name", is("Test actor"))) - .andExpect(jsonPath("email", is("test@example.org"))) .andExpect(jsonPath("externalIds", hasSize(2))) .andExpect(jsonPath("externalIds[0].identifierService.code", is("ORCID"))) .andExpect(jsonPath("externalIds[0].identifierService.label", is("ORCID"))) @@ -275,7 +284,6 @@ public class ActorControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("id", is(actorDto.getId().intValue()))) .andExpect(jsonPath("name", is("Test actor"))) - .andExpect(jsonPath("email", is("test@example.org"))) .andExpect(jsonPath("externalIds", hasSize(2))) .andExpect(jsonPath("externalIds[0].identifierService.code", is("ORCID"))) .andExpect(jsonPath("externalIds[0].identifierService.label", is("ORCID"))) @@ -449,12 +457,12 @@ public class ActorControllerITCase { ActorCore actor = new ActorCore(); actor.setName("Test actor"); actor.setEmail("test@example.org"); - List affiliations = new ArrayList(); + List affiliations = new ArrayList<>(); ActorId affiliation1 = new ActorId(); - affiliation1.setId(100l); + affiliation1.setId(100L); affiliations.add(affiliation1); ActorId affiliation2 = new ActorId(); - affiliation2.setId(4l); + affiliation2.setId(4L); affiliations.add(affiliation2); actor.setAffiliations(affiliations); @@ -591,7 +599,7 @@ public class ActorControllerITCase { ActorCore actor = new ActorCore(); actor.setName("Actor to delete"); actor.setEmail("test@example.org"); - List affiliations = new ArrayList(); + List affiliations = new ArrayList<>(); ActorId affiliation1 = new ActorId(); affiliation1.setId(1L); affiliations.add(affiliation1); @@ -644,7 +652,6 @@ public class ActorControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("id", notNullValue())) .andExpect(jsonPath("name", is("Test actor"))) - .andExpect(jsonPath("email", is("test@example.org"))) .andExpect(jsonPath("externalIds", hasSize(2))) .andExpect(jsonPath("externalIds[0].identifierService.code", is("ORCID"))) .andExpect(jsonPath("externalIds[0].identifierService.label", is("ORCID"))) @@ -665,7 +672,6 @@ public class ActorControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("id", is(actorDto.getId().intValue()))) .andExpect(jsonPath("name", is("Test actor"))) - .andExpect(jsonPath("email", is("test@example.org"))) .andExpect(jsonPath("externalIds", hasSize(2))) .andExpect(jsonPath("externalIds[0].identifierService.code", is("ORCID"))) .andExpect(jsonPath("externalIds[0].identifierService.label", is("ORCID"))) @@ -698,7 +704,6 @@ public class ActorControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("id", notNullValue())) .andExpect(jsonPath("name", is(actor2.getName()))) - .andExpect(jsonPath("email", is(actor2.getEmail()))) .andExpect(jsonPath("externalIds", hasSize(1))) .andExpect(jsonPath("externalIds[0].identifierService.code", is("ORCID"))) .andExpect(jsonPath("externalIds[0].identifierService.label", is("ORCID"))) diff --git a/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java b/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java index 562b6a76..30e35203 100644 --- a/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java +++ b/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java @@ -50,14 +50,14 @@ public class SearchControllerITCase { @Before public void init() throws Exception { CONTRIBUTOR_JWT = LogInTestClient.getJwt(mvc, "Contributor", "q1w2e3r4t5"); - MODERATOR_JWT = LogInTestClient.getJwt(mvc, "Moderator", "q1w2e3r4t5"); + MODERATOR_JWT = LogInTestClient.getJwt(mvc, "Moderator", "q1w2e3r4t5"); } @Test public void shouldReturnAllItems() throws Exception { mvc.perform(get("/api/item-search") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } @@ -65,7 +65,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByWord() throws Exception { mvc.perform(get("/api/item-search?q=gephi") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(3))) .andExpect(jsonPath("items[0].id", is(1))) @@ -108,11 +108,11 @@ public class SearchControllerITCase { String payload = mapper.writeValueAsString(dataset); mvc.perform( - put("/api/datasets/{datasetId}", datasetId) - .contentType(MediaType.APPLICATION_JSON) - .content(payload) - .header("Authorization", CONTRIBUTOR_JWT) - ) + put("/api/datasets/{datasetId}", datasetId) + .contentType(MediaType.APPLICATION_JSON) + .content(payload) + .header("Authorization", CONTRIBUTOR_JWT) + ) .andExpect(status().isOk()) .andExpect(jsonPath("persistentId", is(datasetId))) .andExpect(jsonPath("id", not(is(datasetVersionId)))) @@ -124,9 +124,9 @@ public class SearchControllerITCase { solrTemplate.commit(IndexItem.COLLECTION_NAME); mvc.perform( - get("/api/item-search?q=test") - .header("Authorization", CONTRIBUTOR_JWT) - ) + get("/api/item-search?q=test") + .header("Authorization", CONTRIBUTOR_JWT) + ) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(2))) .andExpect(jsonPath("items[0].id", not(is(datasetVersionId)))) @@ -157,7 +157,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByPhrase() throws Exception { mvc.perform(get("/api/item-search?q=\"dummy text ever\"") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(1))) .andExpect(jsonPath("items[0].id", is(7))) @@ -179,7 +179,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByKeyword() throws Exception { mvc.perform(get("/api/item-search?q=topic modeling") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(2))) .andExpect(jsonPath("items[0].id", is(2))) @@ -207,7 +207,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByKeywordAndFilterByCategories() throws Exception { mvc.perform(get("/api/item-search?q=topic modeling&categories=tool-or-service,training-material") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(1))) .andExpect(jsonPath("items[0].id", is(2))) @@ -232,7 +232,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByKeywordPhrase() throws Exception { mvc.perform(get("/api/item-search?q=\"topic modeling\"") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(2))) .andExpect(jsonPath("items[*].id", containsInAnyOrder(11, 2))) @@ -256,7 +256,7 @@ public class SearchControllerITCase { public void shouldReturnItemsWildcardPhrase() throws Exception { mvc.perform(get("/api/item-search?q=(topi* OR \"Introduction to GEPHI\")&advanced=true") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(4))) .andExpect(jsonPath("items[*].id", containsInAnyOrder(7, 2, 11, 8))) @@ -280,7 +280,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByKeywordPhraseAndFilterByCategories() throws Exception { mvc.perform(get("/api/item-search?q=\"topic modeling\"&categories=tool-or-service,training-material") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(1))) .andExpect(jsonPath("items[0].id", is(2))) @@ -306,7 +306,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByKeywordPart() throws Exception { mvc.perform(get("/api/item-search?q=topic") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(3))) .andExpect(jsonPath("items[*].id", containsInAnyOrder(8, 11, 2))) @@ -334,7 +334,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByKeywordPartAndFilterByCategories() throws Exception { mvc.perform(get("/api/item-search?q=topic&categories=tool-or-service,training-material") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(2))) .andExpect(jsonPath("items[0].id", is(8))) @@ -365,7 +365,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByKeywordPartAndFilterBySubfilters() throws Exception { mvc.perform(get("/api/item-search?q=topic&f.keyword=Lorem ipsum&f.keyword=topic modeling") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(2))) .andExpect(jsonPath("items[*].id", containsInAnyOrder(2, 11))) @@ -391,7 +391,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByKeywordPartAndFilterByCategoriesAndSubfilters() throws Exception { mvc.perform(get("/api/item-search?q=topic&categories=tool-or-service,training-material&f.keyword=Lorem ipsum&f.keyword=topic modeling") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(1))) .andExpect(jsonPath("items[0].id", is(2))) @@ -418,7 +418,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByWordAndSortedByLabel() throws Exception { mvc.perform(get("/api/item-search?q=gephi&order=label") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(3))) .andExpect(jsonPath("items[0].id", is(1))) @@ -448,7 +448,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByWordAndFilteredByCategories() throws Exception { mvc.perform(get("/api/item-search?q=gephi&categories=tool-or-service,dataset") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(1))) .andExpect(jsonPath("items[0].id", is(1))) @@ -472,7 +472,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByWordAndFilteredBySubfilters() throws Exception { mvc.perform(get("/api/item-search?q=gephi&f.keyword=social network analysis") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(1))) .andExpect(jsonPath("items[0].id", is(1))) @@ -497,7 +497,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByWordAndFilteredByCategoriesAndSubfilters() throws Exception { mvc.perform(get("/api/item-search?q=gephi&categories=tool-or-service,dataset&f.keyword=social network analysis") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(1))) .andExpect(jsonPath("items[0].id", is(1))) @@ -522,7 +522,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByWordAndFilteredByCategoriesAndSubfiltersWithNonExistentValue() throws Exception { mvc.perform(get("/api/item-search?q=gephi&categories=tool-or-service,dataset&f.keyword=non_existent_value") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(0))) .andExpect(jsonPath("categories.tool-or-service.count", is(0))) @@ -544,7 +544,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByExpressionOnContributors() throws Exception { mvc.perform(get("/api/item-search?d.contributor=(+CESSDE~ -*Academy*)") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(3))) .andExpect(jsonPath("items[0].id", is(10))) @@ -579,7 +579,7 @@ public class SearchControllerITCase { public void shouldReturnItemsByExpressionOnContributorsAndExpressionOnLanguage() throws Exception { mvc.perform(get("/api/item-search?d.contributor=(+CESSDE~ -*Academy*)&d.language=(en?)") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("items", hasSize(1))) .andExpect(jsonPath("items[0].id", is(4))) @@ -602,7 +602,7 @@ public class SearchControllerITCase { public void shouldReturnAllConcepts() throws Exception { mvc.perform(get("/api/concept-search") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } @@ -610,7 +610,7 @@ public class SearchControllerITCase { public void shouldReturnConceptsByWordAndFilteredByTypes() throws Exception { mvc.perform(get("/api/concept-search?q=software&types=object-type,activity") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("concepts[0].code", is("83"))) .andExpect(jsonPath("concepts[0].vocabulary.code", is("tadirah-activity"))) @@ -622,23 +622,22 @@ public class SearchControllerITCase { } - @Test public void shouldNotCrashWhenSearchingItemsForASlash() throws Exception { mvc.perform( - get("/api/item-search") - .param("q", " / ") - // .param("advanced", "true") - ) + get("/api/item-search") + .param("q", " / ") + // .param("advanced", "true") + ) .andExpect(status().isOk()); } @Test public void shouldNotCrashWhenSearchingConceptsForASlash() throws Exception { mvc.perform( - get("/api/concept-search") - .param("q", "teaching / learning") - ) + get("/api/concept-search") + .param("q", "teaching / learning") + ) .andExpect(status().isOk()); } @@ -646,7 +645,7 @@ public class SearchControllerITCase { public void shouldReturnConceptsWithCandidateFacet() throws Exception { mvc.perform(get("/api/concept-search?q=new&f.candidate=false") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("concepts", hasSize(9))) .andExpect(jsonPath("facets.candidate.['false'].count", is(9))) @@ -658,7 +657,7 @@ public class SearchControllerITCase { public void shouldReturnAllActors() throws Exception { mvc.perform(get("/api/actor-search") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } @@ -666,10 +665,9 @@ public class SearchControllerITCase { public void shouldReturnActorsByWebsite() throws Exception { mvc.perform(get("/api/actor-search?q=CESSDA") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("actors[0].id", is(4))) - .andExpect(jsonPath("actors[0].email", is("cessda@cessda.eu"))) .andExpect(jsonPath("actors[0].name", is("CESSDA"))) .andExpect(jsonPath("actors[0].website", is("https://www.cessda.eu/"))) .andExpect(jsonPath("actors[0].externalIds", hasSize(0))) @@ -681,7 +679,8 @@ public class SearchControllerITCase { public void shouldReturnActorsByDynamicParametersEmail() throws Exception { mvc.perform(get("/api/actor-search?d.email=cessda@cessda.eu") - .contentType(MediaType.APPLICATION_JSON)) + .header("Authorization", MODERATOR_JWT) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("actors[0].id", is(4))) .andExpect(jsonPath("actors[0].email", is("cessda@cessda.eu"))) @@ -695,7 +694,8 @@ public class SearchControllerITCase { public void shouldReturnActorsByEmailExpression() throws Exception { mvc.perform(get("/api/actor-search?d.email=(*@*)") - .contentType(MediaType.APPLICATION_JSON)) + .header("Authorization", MODERATOR_JWT) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("hits", is(2))) .andExpect(jsonPath("actors[0].id", is(4))) @@ -720,10 +720,10 @@ public class SearchControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("phrase", is("gep"))) .andExpect(jsonPath("suggestions", hasSize(3))) - .andExpect(jsonPath("suggestions[0].phrase", is("Gephi"))) - .andExpect(jsonPath("suggestions[0].persistentId", is("n21Kfc"))) - .andExpect(jsonPath("suggestions[1].phrase", is("Gephi: an open source software for exploring and manipulating networks."))) - .andExpect(jsonPath("suggestions[1].persistentId", is("heBAGQ"))) + .andExpect(jsonPath("suggestions[1].phrase", is("Gephi"))) + .andExpect(jsonPath("suggestions[1].persistentId", is("n21Kfc"))) + .andExpect(jsonPath("suggestions[0].phrase", is("Gephi: an open source software for exploring and manipulating networks."))) + .andExpect(jsonPath("suggestions[0].persistentId", is("heBAGQ"))) .andExpect(jsonPath("suggestions[2].phrase", is("Introduction to GEPHI"))) .andExpect(jsonPath("suggestions[2].persistentId", is("WfcKvG"))); } @@ -732,7 +732,7 @@ public class SearchControllerITCase { public void shouldReturnAutocompleteSuggestionWithCategoryForItems() throws Exception { mvc.perform(get("/api/item-search/autocomplete?q=gep&category=training-material") - .contentType(MediaType.APPLICATION_JSON)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("phrase", is("gep"))) .andExpect(jsonPath("suggestions", hasSize(2))) diff --git a/src/test/java/eu/sshopencloud/marketplace/controllers/vocabularies/VocabularyControllerITCase.java b/src/test/java/eu/sshopencloud/marketplace/controllers/vocabularies/VocabularyControllerITCase.java index 94a820fe..d18bb1c9 100644 --- a/src/test/java/eu/sshopencloud/marketplace/controllers/vocabularies/VocabularyControllerITCase.java +++ b/src/test/java/eu/sshopencloud/marketplace/controllers/vocabularies/VocabularyControllerITCase.java @@ -685,6 +685,7 @@ public class VocabularyControllerITCase { ItemMediaCore seriouscat = new ItemMediaCore(new MediaDetailsId(seriouscatId), "Serious Cat", new ConceptId(conceptCode, new VocabularyId(vocabularyCode), null)); mvc.perform(get("/api/datasets") + .header("Authorization", contributorJwt) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("datasets", hasSize(3))) @@ -740,6 +741,7 @@ public class VocabularyControllerITCase { get("/api/training-materials/{id}", persistenId) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) + .header("Authorization", contributorJwt) ) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) -- GitLab From eaf8d7ed9293af0f8b2ae7f2cb25a6df845ec4e9 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Wed, 9 Feb 2022 15:24:09 +0100 Subject: [PATCH 12/24] Fixing draft step duplicity issue. --- .../model/workflows/StepsTree.java | 11 +++++ .../services/items/StepService.java | 42 +++++++++++-------- .../services/items/WorkflowService.java | 5 ++- .../services/search/SearchConverter.java | 2 +- 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/model/workflows/StepsTree.java b/src/main/java/eu/sshopencloud/marketplace/model/workflows/StepsTree.java index 764325da..d2f9f560 100644 --- a/src/main/java/eu/sshopencloud/marketplace/model/workflows/StepsTree.java +++ b/src/main/java/eu/sshopencloud/marketplace/model/workflows/StepsTree.java @@ -155,6 +155,7 @@ public class StepsTree { .findFirst(); } + //Eliza private void removePreviousStep(Step step) { String persistentId = step.getVersionedItem().getPersistentId(); subTrees.removeIf( @@ -165,6 +166,16 @@ public class StepsTree { // renumberSubTrees(); } + //Eliza + public void removePreviousDraftStep(Step step) { + String persistentId = step.getVersionedItem().getPersistentId(); + subTrees.removeIf( + st -> st.getStep().getVersionedItem().getPersistentId().equals(persistentId) + && st.getStep().getId().equals(step.getId()) + ); + + } + public void removeStep(Step step) { String persistentId = step.getVersionedItem().getPersistentId(); subTrees.removeIf(st -> st.getStep().getVersionedItem().getPersistentId().equals(persistentId)); diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java index 949fe910..8184e646 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java @@ -11,7 +11,6 @@ import eu.sshopencloud.marketplace.dto.workflows.StepCore; import eu.sshopencloud.marketplace.dto.workflows.StepDto; import eu.sshopencloud.marketplace.dto.workflows.WorkflowDto; import eu.sshopencloud.marketplace.mappers.workflows.StepMapper; -import eu.sshopencloud.marketplace.mappers.workflows.WorkflowMapper; import eu.sshopencloud.marketplace.model.auth.User; import eu.sshopencloud.marketplace.model.items.Item; import eu.sshopencloud.marketplace.model.items.ItemStatus; @@ -91,14 +90,14 @@ public class StepService extends ItemCrudService contributor.getActor().setEmail(null)); } @@ -444,7 +450,7 @@ public class StepService extends ItemCrudService contributor.getActor().setEmail(null)); } @@ -467,7 +473,7 @@ public class StepService extends ItemCrudService getInformationContributors(String workflowId, String stepId) { validateWorkflowAndStepVersionConsistency(workflowId, stepId, - getLatestStep(workflowId, stepId, false, true,false).getId()); + getLatestStep(workflowId, stepId, false, true, false).getId()); return super.getInformationContributors(stepId); } @@ -483,7 +489,7 @@ public class StepService extends ItemCrudService tmpMergingList = new ArrayList<>(mergeList); tmpMergingList.add(persistentId); - if (!checkMergeStepConsistency(tmpMergingList)) + if (checkMergeStepConsistency(tmpMergingList)) throw new IllegalArgumentException("Steps to merge are from different workflows!"); return prepareMergeItems(persistentId, mergeList); @@ -491,7 +497,7 @@ public class StepService extends ItemCrudService mergeList) throws ItemIsAlreadyMergedException { - if (!checkMergeStepConsistency(mergeList)) + if (checkMergeStepConsistency(mergeList)) throw new IllegalArgumentException("Steps to merge are from different workflows!"); checkIfMergeIsPossible(mergeList); StepDto stepDto; @@ -523,13 +529,13 @@ public class StepService extends ItemCrudService 0) { - stepService.addStepToTree(s.getStep(), null, parent); + stepService.addStepToTree(s.getStep(), null, parent, false); Step step = s.getStep(); List nextParentList = parent.getSubTrees().stream().filter(c -> c.getStep().equals(step)).collect(Collectors.toList()); StepsTree nextParent = nextParentList.get(0); @@ -364,7 +365,7 @@ public class WorkflowService extends ItemCrudService Date: Thu, 10 Feb 2022 08:42:54 +0100 Subject: [PATCH 13/24] Changes in tests. --- .../controllers/search/SearchControllerITCase.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java b/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java index 30e35203..09a372ed 100644 --- a/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java +++ b/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java @@ -720,10 +720,11 @@ public class SearchControllerITCase { .andExpect(status().isOk()) .andExpect(jsonPath("phrase", is("gep"))) .andExpect(jsonPath("suggestions", hasSize(3))) - .andExpect(jsonPath("suggestions[1].phrase", is("Gephi"))) - .andExpect(jsonPath("suggestions[1].persistentId", is("n21Kfc"))) .andExpect(jsonPath("suggestions[0].phrase", is("Gephi: an open source software for exploring and manipulating networks."))) .andExpect(jsonPath("suggestions[0].persistentId", is("heBAGQ"))) + + .andExpect(jsonPath("suggestions[1].phrase", is("Gephi"))) + .andExpect(jsonPath("suggestions[1].persistentId", is("n21Kfc"))) .andExpect(jsonPath("suggestions[2].phrase", is("Introduction to GEPHI"))) .andExpect(jsonPath("suggestions[2].persistentId", is("WfcKvG"))); } -- GitLab From 5a7a37f857e6d6345774cd362152339b3a5edc3b Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Fri, 11 Feb 2022 12:47:46 +0100 Subject: [PATCH 14/24] Diff method refactoring. --- .../services/items/ItemsComparator.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java index ad62cbea..52d2c79a 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java @@ -25,11 +25,16 @@ import eu.sshopencloud.marketplace.model.workflows.Step; import eu.sshopencloud.marketplace.model.workflows.Workflow; import lombok.experimental.UtilityClass; +import java.time.ZoneId; +import java.time.ZonedDateTime; + @UtilityClass public class ItemsComparator { - public static final String notChangedField = "unaltered"; + private static final String notChangedField = "unaltered"; + + private static final ZonedDateTime notChangedDate = ZonedDateTime.of(0, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")); @SuppressWarnings(value = "rawtypes") public ItemsDifferencesDto differentiateItems(ItemDto item, ItemDto other) { @@ -353,11 +358,11 @@ public class ItemsComparator { } private boolean areConceptsEqual(ConceptId conceptId, ConceptBasicDto conceptDto) { - return (conceptId == null && conceptDto == null) - || ( + return !(!(conceptId == null && conceptDto == null) + && !( (conceptId != null && conceptId.getCode() != null && conceptId.getCode().equals(conceptDto.getCode())) && (conceptId != null && conceptId.getVocabulary() != null && conceptId.getVocabulary().getCode() != null && conceptId.getVocabulary().getCode().equals(conceptDto.getVocabulary().getCode())) - && (conceptId != null && conceptId.getUri() != null && conceptId.getUri().equals(conceptDto.getUri()))); + && (conceptId != null && conceptId.getUri() != null && conceptId.getUri().equals(conceptDto.getUri())))); } @@ -466,15 +471,16 @@ public class ItemsComparator { && (areConceptsEqual(itemMediaCore.getConcept(), itemMediaDto.getConcept())); } - + //Eliza private void differentiateDigitalObjectDates(ItemDto item, ItemDto other, ItemsDifferencesDto differences) { + System.out.println("Eliza "); if (item instanceof DigitalObjectDto) { DigitalObjectDto itemDigitalObject = (DigitalObjectDto) item; if (other instanceof DigitalObjectDto) { DigitalObjectDto otherDigitalObject = (DigitalObjectDto) other; if (itemDigitalObject.getDateCreated() != null) { if (itemDigitalObject.getDateCreated().equals(otherDigitalObject.getDateCreated())) - otherDigitalObject.setDateCreated(null); + otherDigitalObject.setDateCreated(notChangedDate); else differences.setEqual(false); } else { @@ -482,9 +488,9 @@ public class ItemsComparator { differences.setEqual(false); } if (itemDigitalObject.getDateLastUpdated() != null) { - if (itemDigitalObject.getDateLastUpdated().equals(otherDigitalObject.getDateLastUpdated())) - otherDigitalObject.setDateLastUpdated(null); - else + if (itemDigitalObject.getDateLastUpdated().equals(otherDigitalObject.getDateLastUpdated())) { + otherDigitalObject.setDateLastUpdated(notChangedDate); + } else differences.setEqual(false); } else { if (otherDigitalObject.getDateLastUpdated() != null) -- GitLab From 358f1841709e9b84c05380672e320f00d46a7472 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Wed, 16 Feb 2022 13:21:14 +0100 Subject: [PATCH 15/24] Showing only last item for related items. --- .../model/workflows/StepsTree.java | 2 -- .../items/ItemRelatedItemService.java | 4 ++-- .../services/items/ItemVisibilityService.java | 19 ++++++++++++++----- .../services/items/StepService.java | 2 -- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/model/workflows/StepsTree.java b/src/main/java/eu/sshopencloud/marketplace/model/workflows/StepsTree.java index d2f9f560..2c46c935 100644 --- a/src/main/java/eu/sshopencloud/marketplace/model/workflows/StepsTree.java +++ b/src/main/java/eu/sshopencloud/marketplace/model/workflows/StepsTree.java @@ -155,7 +155,6 @@ public class StepsTree { .findFirst(); } - //Eliza private void removePreviousStep(Step step) { String persistentId = step.getVersionedItem().getPersistentId(); subTrees.removeIf( @@ -166,7 +165,6 @@ public class StepsTree { // renumberSubTrees(); } - //Eliza public void removePreviousDraftStep(Step step) { String persistentId = step.getVersionedItem().getPersistentId(); subTrees.removeIf( diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemRelatedItemService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemRelatedItemService.java index 5d6f2163..7e09d896 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemRelatedItemService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemRelatedItemService.java @@ -53,12 +53,12 @@ public class ItemRelatedItemService { List relatedItems = new ArrayList<>(); List subjectRelations = itemRelatedItemRepository.findAllBySubjectId(itemId).stream() - .filter(relatedItem -> itemVisibilityService.shouldCurrentUserSeeItem(relatedItem.getObject())) + .filter(relatedItem -> itemVisibilityService.shouldCurrentUserSeeItem(relatedItem.getObject()) && itemVisibilityService.isTheLatestVersion(relatedItem.getObject())) .map(relatedItemsConverter::convertRelatedItemFromSubject) .collect(Collectors.toList()); List objectRelations = itemRelatedItemRepository.findAllByObjectId(itemId).stream() - .filter(relatedItem -> itemVisibilityService.shouldCurrentUserSeeItem(relatedItem.getSubject())) + .filter(relatedItem -> itemVisibilityService.shouldCurrentUserSeeItem(relatedItem.getSubject()) && itemVisibilityService.isTheLatestVersion(relatedItem.getSubject())) .map(relatedItemsConverter::convertRelatedItemFromObject) .collect(Collectors.toList()); diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java index eb81127a..d8658a15 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java @@ -56,8 +56,7 @@ class ItemVisibilityService { version.setStatus(SUGGESTED); versionedItem.setStatus(VersionedItemStatus.SUGGESTED); } - } - else if (currentUser.isSystemContributor()) { + } else if (currentUser.isSystemContributor()) { version.setStatus(ItemStatus.INGESTED); versionedItem.setStatus(VersionedItemStatus.INGESTED); } else if (currentUser.isContributor()) { @@ -88,11 +87,21 @@ class ItemVisibilityService { if (user == null) return false; - if (user.isModerator()) - return true; - return List.of(SUGGESTED, INGESTED, DISAPPROVED).contains(itemStatus) && user.isContributor() && user.equals(version.getInformationContributor()); } + + + public boolean isTheLatestVersion(Item item) { + User currentUser = LoggedInUserHolder.getLoggedInUser(); + if (currentUser != null) { + if (currentUser.equals(item.getInformationContributor())) { + return item.getVersionedItem().getCurrentVersion().getId().equals(item.getId()); + } else { + return currentUser.isModerator() && item.getVersionedItem().getCurrentVersion().getId().equals(item.getId()) || (currentUser.isContributor() && !currentUser.isModerator() && !currentUser.isSystemContributor()); + } + } + return true; + } } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java index 8184e646..a124ccc5 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/StepService.java @@ -114,7 +114,6 @@ public class StepService extends ItemCrudService Date: Tue, 22 Feb 2022 12:27:03 +0100 Subject: [PATCH 16/24] Empty dynamic-property fix. --- .../marketplace/services/items/ItemsComparator.java | 3 +-- .../marketplace/services/search/SearchService.java | 11 ++++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java index 52d2c79a..bddd7d08 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java @@ -471,9 +471,8 @@ public class ItemsComparator { && (areConceptsEqual(itemMediaCore.getConcept(), itemMediaDto.getConcept())); } - //Eliza + private void differentiateDigitalObjectDates(ItemDto item, ItemDto other, ItemsDifferencesDto differences) { - System.out.println("Eliza "); if (item instanceof DigitalObjectDto) { DigitalObjectDto itemDigitalObject = (DigitalObjectDto) item; if (other instanceof DigitalObjectDto) { diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java index 6ad663e5..ebb5c4c3 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java @@ -303,6 +303,10 @@ public class SearchService { if (expression.contains("/")) expression = ClientUtils.escapeQueryChars(expression); + if (expression.isEmpty() && !code.isEmpty()) { + throw new IllegalArgumentException(String.format("To use dynamic property, you must assign value to your code: %s", code)); + } + PropertyType propertyType = propertyTypeService.loadPropertyTypeOrNull(code); if (propertyType != null) { return new SearchExpressionDynamicFieldCriteria(code, expression, propertyType.getType()); @@ -322,10 +326,7 @@ public class SearchService { FacetPage facetPage = searchActorRepository.findByQueryAndFilters(queryCriteria, expressionCriteria, pageable); - PaginatedSearchActor result; - - - result = PaginatedSearchActor.builder() + PaginatedSearchActor result = PaginatedSearchActor.builder() .q(q) .actors(facetPage.get().map(SearchConverter::convertIndexActor).collect(Collectors.toList())) .hits(facetPage.getTotalElements()).count(facetPage.getNumberOfElements()) @@ -341,7 +342,7 @@ public class SearchService { searchActor.setExternalIds(ActorExternalIdMapper.INSTANCE.toDto(actor.getExternalIds())); searchActor.setAffiliations(ActorMapper.INSTANCE.toDto(actor.getAffiliations())); - if (LoggedInUserHolder.getLoggedInUser() ==null || !LoggedInUserHolder.getLoggedInUser().isModerator()) + if (LoggedInUserHolder.getLoggedInUser() == null || !LoggedInUserHolder.getLoggedInUser().isModerator()) searchActor.getAffiliations().forEach(affiliation -> affiliation.setEmail(null)); } -- GitLab From 592fc9564396ac755ddd1bd754d4098f83a82406 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Tue, 22 Feb 2022 14:24:51 +0100 Subject: [PATCH 17/24] Fixing tests. --- .../services/items/ItemVisibilityService.java | 13 ++++++++++- .../datasets/DatasetControllerITCase.java | 6 ++--- .../TrainingMaterialControllerITCase.java | 22 ++++++------------- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java index d8658a15..ec34d57a 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java @@ -75,10 +75,13 @@ class ItemVisibilityService { if (item.getStatus().equals(ItemStatus.DEPRECATED)) return false; + System.out.println("Eliza " + hasAccessToVersion(item, user)); return hasAccessToVersion(item, user); } + //Eliza public boolean hasAccessToVersion(Item version, User user) { + ItemStatus itemStatus = version.getStatus(); if (itemStatus.equals(ItemStatus.APPROVED)) @@ -87,6 +90,9 @@ class ItemVisibilityService { if (user == null) return false; + if (user.isModerator()) + return true; + return List.of(SUGGESTED, INGESTED, DISAPPROVED).contains(itemStatus) && user.isContributor() && user.equals(version.getInformationContributor()); @@ -99,7 +105,12 @@ class ItemVisibilityService { if (currentUser.equals(item.getInformationContributor())) { return item.getVersionedItem().getCurrentVersion().getId().equals(item.getId()); } else { - return currentUser.isModerator() && item.getVersionedItem().getCurrentVersion().getId().equals(item.getId()) || (currentUser.isContributor() && !currentUser.isModerator() && !currentUser.isSystemContributor()); + if(currentUser.isModerator() && item.getVersionedItem().getCurrentVersion().getId().equals(item.getId())) + return true; + if(currentUser.isModerator() && !item.getVersionedItem().getCurrentVersion().getId().equals(item.getId())) + return false; + if(currentUser.isContributor() && !currentUser.isModerator() && !currentUser.isSystemContributor()) + return false; } } return true; diff --git a/src/test/java/eu/sshopencloud/marketplace/controllers/datasets/DatasetControllerITCase.java b/src/test/java/eu/sshopencloud/marketplace/controllers/datasets/DatasetControllerITCase.java index 1090e8c9..db8d8503 100644 --- a/src/test/java/eu/sshopencloud/marketplace/controllers/datasets/DatasetControllerITCase.java +++ b/src/test/java/eu/sshopencloud/marketplace/controllers/datasets/DatasetControllerITCase.java @@ -2023,7 +2023,7 @@ public class DatasetControllerITCase { String responseDataset = mvc.perform( get("/api/datasets/{id}",datasetPersistentId) .param("approved", "false") - .header("Authorization", IMPORTER_JWT) + .header("Authorization", ADMINISTRATOR_JWT) ) .andExpect(status().isOk()) .andExpect(jsonPath("persistentId", is(datasetPersistentId))) @@ -2076,7 +2076,7 @@ public class DatasetControllerITCase { mvc.perform( get("/api/tools-services/{id}", otherToolPersistentId ) .param("approved", "false") - .header("Authorization", IMPORTER_JWT) + .header("Authorization", ADMINISTRATOR_JWT) ) .andExpect(status().isOk()) .andExpect(jsonPath("persistentId", is(otherToolPersistentId))) @@ -2097,7 +2097,7 @@ public class DatasetControllerITCase { mvc.perform(get("/api/datasets/{persistentId}/diff", datasetPersistentId) .contentType(MediaType.APPLICATION_JSON) .param("with", otherToolPersistentId) - .header("Authorization", MODERATOR_JWT)) + .header("Authorization", ADMINISTRATOR_JWT)) .andExpect(status().isOk()) .andExpect(jsonPath("item.persistentId", is(datasetPersistentId))) .andExpect(jsonPath("item.category", is("dataset"))) diff --git a/src/test/java/eu/sshopencloud/marketplace/controllers/trainings/TrainingMaterialControllerITCase.java b/src/test/java/eu/sshopencloud/marketplace/controllers/trainings/TrainingMaterialControllerITCase.java index 2db419e0..0d5959b0 100644 --- a/src/test/java/eu/sshopencloud/marketplace/controllers/trainings/TrainingMaterialControllerITCase.java +++ b/src/test/java/eu/sshopencloud/marketplace/controllers/trainings/TrainingMaterialControllerITCase.java @@ -2209,7 +2209,7 @@ public class TrainingMaterialControllerITCase { } @Test - public void shouldApproveTrainingMaterialRelatedToAToolMultipleTimes() throws Exception { + public void shouldApproveTrainingMaterialRelatedToATool() throws Exception { String trainingMaterialId = "heBAGQ"; String relatedObjectId = "n21Kfc"; @@ -2240,14 +2240,10 @@ public class TrainingMaterialControllerITCase { ) .andExpect(status().isOk()) .andExpect(jsonPath("persistentId", is(relatedObjectId))) - .andExpect(jsonPath("relatedItems", hasSize(3))) - .andExpect(jsonPath("relatedItems[0].persistentId", is("Xgufde"))) - .andExpect(jsonPath("relatedItems[1].persistentId", is(trainingMaterialId))) - .andExpect(jsonPath("relatedItems[1].id", is(4))) - .andExpect(jsonPath("relatedItems[1].relation.code", is("is-documented-by"))) - .andExpect(jsonPath("relatedItems[2].persistentId", is(trainingMaterialId))) - .andExpect(jsonPath("relatedItems[2].id", not(is(4)))) - .andExpect(jsonPath("relatedItems[2].relation.code", is("is-documented-by"))); + .andExpect(jsonPath("relatedItems", hasSize(1))) + .andExpect(jsonPath("relatedItems[0].persistentId", is(trainingMaterialId))) + .andExpect(jsonPath("relatedItems[0].relation.code", is("is-documented-by"))); + trainingMaterial.setLabel("Gephi: explore the networks!"); @@ -2297,14 +2293,10 @@ public class TrainingMaterialControllerITCase { ) .andExpect(status().isOk()) .andExpect(jsonPath("persistentId", is(relatedObjectId))) - .andExpect(jsonPath("relatedItems", hasSize(3))) + .andExpect(jsonPath("relatedItems", hasSize(2))) .andExpect(jsonPath("relatedItems[0].persistentId", is("Xgufde"))) .andExpect(jsonPath("relatedItems[1].persistentId", is(trainingMaterialId))) - .andExpect(jsonPath("relatedItems[1].id", is(4))) - .andExpect(jsonPath("relatedItems[1].relation.code", is("is-documented-by"))) - .andExpect(jsonPath("relatedItems[2].persistentId", is(trainingMaterialId))) - .andExpect(jsonPath("relatedItems[2].id", not(is(4)))) - .andExpect(jsonPath("relatedItems[2].relation.code", is("is-documented-by"))); + .andExpect(jsonPath("relatedItems[1].relation.code", is("is-documented-by"))); ToolCore tool = new ToolCore(); tool.setLabel("Gephi: lonline"); -- GitLab From 956b986611e3b211134131e7928e7dfe4779f778 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Tue, 22 Feb 2022 14:51:30 +0100 Subject: [PATCH 18/24] Fixing tests. --- .../marketplace/controllers/search/UrlParamsExtractor.java | 7 ++++--- .../marketplace/services/search/SearchService.java | 4 ---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/search/UrlParamsExtractor.java b/src/main/java/eu/sshopencloud/marketplace/controllers/search/UrlParamsExtractor.java index 4c3a4ad6..b0d0f236 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/search/UrlParamsExtractor.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/search/UrlParamsExtractor.java @@ -11,7 +11,7 @@ import java.util.Map; public class UrlParamsExtractor { public Map> extractFilterParams(MultiValueMap params) { - Map> filterParams = new HashMap>(); + Map> filterParams = new HashMap<>(); for (Map.Entry> entry: params.entrySet()) { String key = entry.getKey(); if (key.startsWith("f.")) { @@ -22,11 +22,12 @@ public class UrlParamsExtractor { } public Map extractExpressionParams(MultiValueMap params) { - Map expressionParams = new HashMap(); + Map expressionParams = new HashMap<>(); for (Map.Entry> entry: params.entrySet()) { String key = entry.getKey(); if (key.startsWith("d.")) { - expressionParams.put(key.substring(2), entry.getValue().get(0)); + if(!entry.getValue().get(0).isEmpty()) + expressionParams.put(key.substring(2), entry.getValue().get(0)); } } return expressionParams; diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java index ebb5c4c3..4daf1177 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchService.java @@ -303,10 +303,6 @@ public class SearchService { if (expression.contains("/")) expression = ClientUtils.escapeQueryChars(expression); - if (expression.isEmpty() && !code.isEmpty()) { - throw new IllegalArgumentException(String.format("To use dynamic property, you must assign value to your code: %s", code)); - } - PropertyType propertyType = propertyTypeService.loadPropertyTypeOrNull(code); if (propertyType != null) { return new SearchExpressionDynamicFieldCriteria(code, expression, propertyType.getType()); -- GitLab From 49e5c72f6736bdf5a1d82bc009009a3b46bb577e Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Wed, 9 Mar 2022 10:39:37 +0100 Subject: [PATCH 19/24] Adding candidate field to SearchConcept with tests modification. --- .../eu/sshopencloud/marketplace/dto/search/SearchConcept.java | 2 ++ .../marketplace/services/search/SearchConverter.java | 1 + .../marketplace/controllers/search/SearchControllerITCase.java | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/dto/search/SearchConcept.java b/src/main/java/eu/sshopencloud/marketplace/dto/search/SearchConcept.java index ade43938..2e7a6204 100644 --- a/src/main/java/eu/sshopencloud/marketplace/dto/search/SearchConcept.java +++ b/src/main/java/eu/sshopencloud/marketplace/dto/search/SearchConcept.java @@ -29,4 +29,6 @@ public class SearchConcept { private List types; + private boolean candidate; + } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java index 78aae8fe..4ca40fb7 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/search/SearchConverter.java @@ -93,6 +93,7 @@ public class SearchConverter { return SearchConcept.builder() .code(indexConcept.getCode()).vocabulary(vocabulary).label(indexConcept.getLabel()).notation(indexConcept.getNotation()).definition(indexConcept.getDefinition()) .uri(indexConcept.getUri()) + .candidate(indexConcept.getCandidate()) .types(indexConcept.getTypes().stream() .map(type -> { PropertyTypeId propertyType = new PropertyTypeId(); diff --git a/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java b/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java index 09a372ed..f5aab2f0 100644 --- a/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java +++ b/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java @@ -615,6 +615,7 @@ public class SearchControllerITCase { .andExpect(jsonPath("concepts[0].code", is("83"))) .andExpect(jsonPath("concepts[0].vocabulary.code", is("tadirah-activity"))) .andExpect(jsonPath("concepts[0].label", is("Software"))) + .andExpect(jsonPath("concepts[0].candidate", is(false))) .andExpect(jsonPath("types.activity.count", is(7))) .andExpect(jsonPath("types.activity.checked", is(true))) .andExpect(jsonPath("facets.candidate.['false'].count", is(7))) @@ -722,7 +723,6 @@ public class SearchControllerITCase { .andExpect(jsonPath("suggestions", hasSize(3))) .andExpect(jsonPath("suggestions[0].phrase", is("Gephi: an open source software for exploring and manipulating networks."))) .andExpect(jsonPath("suggestions[0].persistentId", is("heBAGQ"))) - .andExpect(jsonPath("suggestions[1].phrase", is("Gephi"))) .andExpect(jsonPath("suggestions[1].persistentId", is("n21Kfc"))) .andExpect(jsonPath("suggestions[2].phrase", is("Introduction to GEPHI"))) -- GitLab From 559a9e8a023e6d0160ccc963ed33505e35c5d575 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Wed, 9 Mar 2022 12:17:14 +0100 Subject: [PATCH 20/24] Returning by default only items with status=approved --- .../marketplace/controllers/search/SearchController.java | 4 ++++ .../controllers/search/SearchControllerITCase.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/controllers/search/SearchController.java b/src/main/java/eu/sshopencloud/marketplace/controllers/search/SearchController.java index 31418370..e69e0464 100644 --- a/src/main/java/eu/sshopencloud/marketplace/controllers/search/SearchController.java +++ b/src/main/java/eu/sshopencloud/marketplace/controllers/search/SearchController.java @@ -51,8 +51,12 @@ class SearchController { + SearchFilter.ITEMS_INDEX_TYPE_FILTERS + ".", schema = @Schema(type = "string")) @RequestParam(required = false) MultiValueMap f) throws PageTooLargeException, IllegalFilterException { + if(!d.containsKey("d.status")) + d.add("d.status", "approved"); + Map expressionParams = UrlParamsExtractor.extractExpressionParams(d); Map> filterParams = UrlParamsExtractor.extractFilterParams(f); + return ResponseEntity.ok(searchService.searchItems(q, advanced, includeSteps, expressionParams, categories, filterParams, order, pageCoordsValidator.validate(page, perpage))); } diff --git a/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java b/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java index f5aab2f0..c62fa4b1 100644 --- a/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java +++ b/src/test/java/eu/sshopencloud/marketplace/controllers/search/SearchControllerITCase.java @@ -124,7 +124,7 @@ public class SearchControllerITCase { solrTemplate.commit(IndexItem.COLLECTION_NAME); mvc.perform( - get("/api/item-search?q=test") + get("/api/item-search?q=test&d.status=(suggested OR approved)") .header("Authorization", CONTRIBUTOR_JWT) ) .andExpect(status().isOk()) -- GitLab From 1b69c53074c25bf1e4fd7223d0efad8e613598fa Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Wed, 9 Mar 2022 16:24:07 +0100 Subject: [PATCH 21/24] Diff endpoint data for workflows including info about added/removed steps --- .../services/items/ItemCrudService.java | 5 +++ .../services/items/ItemsComparator.java | 34 +++++++++++++++++++ .../services/items/ItemsService.java | 3 ++ .../services/items/WorkflowService.java | 15 ++++++-- 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemCrudService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemCrudService.java index 0b1dc291..03bd73fe 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemCrudService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemCrudService.java @@ -9,6 +9,7 @@ import eu.sshopencloud.marketplace.dto.auth.UserDto; import eu.sshopencloud.marketplace.dto.items.*; import eu.sshopencloud.marketplace.dto.sources.SourceDto; import eu.sshopencloud.marketplace.dto.vocabularies.PropertyDto; +import eu.sshopencloud.marketplace.dto.workflows.WorkflowDto; import eu.sshopencloud.marketplace.mappers.items.ItemExtBasicConverter; import eu.sshopencloud.marketplace.model.auth.User; import eu.sshopencloud.marketplace.model.items.*; @@ -793,6 +794,10 @@ abstract class ItemCrudService { Page draftItemsPage = draftItemRepository.findByOwner(LoggedInUserHolder.getLoggedInUser(), PageRequest.of(pageCoords.getPage() - 1, pageCoords.getPerpage(), Sort.by(getSortOrderByItemOrder(order)))); + //List items = draftItemsPage.stream().filter(draftItem -> !draftItem.getItem().getCategory().equals(ItemCategory.STEP)).map(draftItem -> ItemConverter.convertItem(draftItem.getItem())).collect(Collectors.toList()); + List items = draftItemsPage.stream().map(draftItem -> ItemConverter.convertItem(draftItem.getItem())).collect(Collectors.toList()); + return PaginatedItemsBasic.builder().items(items) .count(draftItemsPage.getContent().size()).hits(draftItemsPage.getTotalElements()) .page(pageCoords.getPage()).perpage(pageCoords.getPerpage()) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java index cdc56596..d3021fde 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java @@ -13,6 +13,7 @@ import eu.sshopencloud.marketplace.dto.workflows.WorkflowDto; import eu.sshopencloud.marketplace.mappers.workflows.WorkflowMapper; import eu.sshopencloud.marketplace.model.auth.User; import eu.sshopencloud.marketplace.model.items.Item; +import eu.sshopencloud.marketplace.model.items.ItemCategory; import eu.sshopencloud.marketplace.model.items.ItemStatus; import eu.sshopencloud.marketplace.model.workflows.Step; import eu.sshopencloud.marketplace.model.workflows.StepsTree; @@ -295,7 +296,7 @@ public class WorkflowService extends ItemCrudService contributor.getActor().setEmail(null)); } @@ -309,7 +310,7 @@ public class WorkflowService extends ItemCrudService contributor.getActor().setEmail(null)); } @@ -395,6 +396,14 @@ public class WorkflowService extends ItemCrudService Date: Thu, 10 Mar 2022 09:53:38 +0100 Subject: [PATCH 22/24] Diff endpoint data for workflows including info about added/removed steps 2. --- .../services/items/ItemCrudService.java | 1 - .../services/items/ItemsComparator.java | 1 - .../services/items/WorkflowService.java | 11 +++- .../workflows/WorkflowControllerITCase.java | 54 +++++++++++++++++++ 4 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemCrudService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemCrudService.java index 03bd73fe..1059d64f 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemCrudService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemCrudService.java @@ -467,7 +467,6 @@ abstract class ItemCrudService Date: Thu, 10 Mar 2022 12:58:41 +0100 Subject: [PATCH 23/24] Refactoring for compose of. --- .../marketplace/services/items/ItemVisibilityService.java | 4 +--- .../marketplace/services/items/ItemsComparator.java | 3 ++- .../marketplace/services/items/WorkflowService.java | 2 -- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java index ec34d57a..50e5ebae 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemVisibilityService.java @@ -74,12 +74,10 @@ class ItemVisibilityService { public boolean shouldSeeItem(Item item, User user) { if (item.getStatus().equals(ItemStatus.DEPRECATED)) return false; - - System.out.println("Eliza " + hasAccessToVersion(item, user)); return hasAccessToVersion(item, user); } - //Eliza + public boolean hasAccessToVersion(Item version, User user) { ItemStatus itemStatus = version.getStatus(); diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java index 3a8529fc..94084702 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsComparator.java @@ -596,7 +596,6 @@ public class ItemsComparator { } } - //Eliza public ItemsDifferencesDto differentiateComposedOf(WorkflowDto item, WorkflowDto other, ItemsDifferencesDto differences) { int itemSize = item.getComposedOf() != null ? item.getComposedOf().size() : 0; @@ -614,6 +613,8 @@ public class ItemsComparator { differences.setEqual(false); } } + if (itemSize != otherSize) + differences.setEqual(false); } else { if (other.getComposedOf() != null) { differences.setEqual(false); diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java index 1d81a416..ca47e0c3 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/WorkflowService.java @@ -408,8 +408,6 @@ public class WorkflowService extends ItemCrudService Date: Fri, 11 Mar 2022 13:47:22 +0100 Subject: [PATCH 24/24] Filter draft-items. --- .../marketplace/services/items/ItemsService.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsService.java index d8bc9444..c02843a8 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsService.java @@ -82,10 +82,7 @@ public class ItemsService extends ItemVersionService { Page draftItemsPage = draftItemRepository.findByOwner(LoggedInUserHolder.getLoggedInUser(), PageRequest.of(pageCoords.getPage() - 1, pageCoords.getPerpage(), Sort.by(getSortOrderByItemOrder(order)))); - //List items = draftItemsPage.stream().filter(draftItem -> !draftItem.getItem().getCategory().equals(ItemCategory.STEP)).map(draftItem -> ItemConverter.convertItem(draftItem.getItem())).collect(Collectors.toList()); - - List items = draftItemsPage.stream().map(draftItem -> ItemConverter.convertItem(draftItem.getItem())).collect(Collectors.toList()); - + List items = draftItemsPage.stream().filter(draftItem -> !draftItem.getItem().getCategory().equals(ItemCategory.STEP)).map(draftItem -> ItemConverter.convertItem(draftItem.getItem())).collect(Collectors.toList()); return PaginatedItemsBasic.builder().items(items) .count(draftItemsPage.getContent().size()).hits(draftItemsPage.getTotalElements()) -- GitLab