diff --git a/ui/ui-archive-search/src/main/java/fr/gouv/vitamui/archives/search/service/ArchivesSearchService.java b/ui/ui-archive-search/src/main/java/fr/gouv/vitamui/archives/search/service/ArchivesSearchService.java index 5888fb1e39a8adfcb9d0b7d1929a07e1c4853695..407117183bd42394ca773e7e21ae60acaa30aa7e 100644 --- a/ui/ui-archive-search/src/main/java/fr/gouv/vitamui/archives/search/service/ArchivesSearchService.java +++ b/ui/ui-archive-search/src/main/java/fr/gouv/vitamui/archives/search/service/ArchivesSearchService.java @@ -41,6 +41,7 @@ import fr.gouv.vitamui.commons.vitam.api.dto.VitamUISearchResponseDto; import fr.gouv.vitamui.commons.vitam.api.model.ObjectQualifierTypeEnum; import fr.gouv.vitamui.ui.commons.service.AbstractPaginateService; import fr.gouv.vitamui.ui.commons.service.CommonService; +import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; @@ -122,23 +123,30 @@ public class ArchivesSearchService extends AbstractPaginateService<ArchiveUnitsD public String getUsage(ResultsDto got, ObjectData objectData) { List<QualifiersDto> qualifiers = got.getQualifiers(); + String finalUsage = null; for (QualifiersDto qualifier : qualifiers) { if (qualifier.getQualifier().equals(ObjectQualifierTypeEnum.BINARYMASTER.getValue())) { - return setObjectData(objectData, qualifier, ObjectQualifierTypeEnum.BINARYMASTER); + finalUsage = setObjectData(objectData, qualifier, ObjectQualifierTypeEnum.BINARYMASTER); + if(StringUtils.isEmpty(objectData.getFilename())) { + continue; + } } if (qualifier.getQualifier().equals(ObjectQualifierTypeEnum.DISSEMINATION.getValue())) { - return setObjectData(objectData, qualifier, ObjectQualifierTypeEnum.DISSEMINATION); + setObjectData(objectData, qualifier, ObjectQualifierTypeEnum.DISSEMINATION); + if(StringUtils.isEmpty(objectData.getFilename())) { + continue; + } } if (qualifier.getQualifier().equals(ObjectQualifierTypeEnum.THUMBNAIL.getValue())) { - return setObjectData(objectData, qualifier, ObjectQualifierTypeEnum.THUMBNAIL); + setObjectData(objectData, qualifier, ObjectQualifierTypeEnum.THUMBNAIL); } } - return null; + return finalUsage; } @NotNull private String setObjectData(ObjectData objectData, QualifiersDto qualifier, ObjectQualifierTypeEnum objectQualifierTypeEnum) { - if(qualifier.getVersions().get(0).getFileInfoModel() != null) { + if(qualifier.getVersions().get(0).getFileInfoModel() != null && StringUtils.isEmpty(objectData.getFilename())) { String filename = qualifier.getVersions().get(0).getFileInfoModel().getFilename(); objectData.setFilename(filename); } diff --git a/ui/ui-archive-search/src/test/java/fr/gouv/vitamui/archives/search/service/ArchivesSearchServiceTest.java b/ui/ui-archive-search/src/test/java/fr/gouv/vitamui/archives/search/service/ArchivesSearchServiceTest.java index 0d527f828f5b5b75bb8b7b01978c2c85d9e1b981..974f7f8955f9c7283755a2c43ce07390d9c06634 100644 --- a/ui/ui-archive-search/src/test/java/fr/gouv/vitamui/archives/search/service/ArchivesSearchServiceTest.java +++ b/ui/ui-archive-search/src/test/java/fr/gouv/vitamui/archives/search/service/ArchivesSearchServiceTest.java @@ -197,7 +197,7 @@ public class ArchivesSearchServiceTest { int version = archivesSearchService.getVersion(resultsDto.getQualifiers(), usage); // Then - assertEquals(usage, ObjectQualifierTypeEnum.DISSEMINATION.getValue()); + assertEquals(usage, ObjectQualifierTypeEnum.BINARYMASTER.getValue()); assertEquals(version, 1); } @@ -216,7 +216,7 @@ public class ArchivesSearchServiceTest { String usage = archivesSearchService.getUsage(resultsDto, objectData); // Then - assertEquals(usage, ObjectQualifierTypeEnum.DISSEMINATION.getValue()); + assertEquals(usage, ObjectQualifierTypeEnum.BINARYMASTER.getValue()); assertEquals(objectData.getFilename(), "Gallieni pour diffusion"); } @@ -238,6 +238,62 @@ public class ArchivesSearchServiceTest { assertNull(usage); } + @Test + public void should_return_file_name_of_dissemination_when_absent_in_binary_master() + throws IOException, InvalidParseOperationException, VitamClientException { + // Given + ObjectData objectData = new ObjectData(); + RequestResponse<JsonNode> jsonNodeRequestResponse = buildGot("data/vitam_got_full.json"); + ResultsDto resultsDto = buildResults(jsonNodeRequestResponse); + // When + when(unitService.findObjectMetadataById(any(), any())) + .thenReturn(jsonNodeRequestResponse); + when(archivesSearchService.findObjectById(any(), any())) + .thenReturn(ResponseEntity.of(Optional.of(resultsDto))); + String usage = archivesSearchService.getUsage(resultsDto, objectData); + + // Then + assertEquals(usage, ObjectQualifierTypeEnum.BINARYMASTER.getValue()); + assertEquals(objectData.getFilename(), "titre dissemination"); + } + + @Test + public void should_return_file_name_of_thumbnail_when_absent_in_binary_and_dissemination() + throws IOException, InvalidParseOperationException, VitamClientException { + // Given + ObjectData objectData = new ObjectData(); + RequestResponse<JsonNode> jsonNodeRequestResponse = buildGot("data/vitam_got_full_with_thumbs.json"); + ResultsDto resultsDto = buildResults(jsonNodeRequestResponse); + // When + when(unitService.findObjectMetadataById(any(), any())) + .thenReturn(jsonNodeRequestResponse); + when(archivesSearchService.findObjectById(any(), any())) + .thenReturn(ResponseEntity.of(Optional.of(resultsDto))); + String usage = archivesSearchService.getUsage(resultsDto, objectData); + + // Then + assertEquals(usage, ObjectQualifierTypeEnum.BINARYMASTER.getValue()); + assertEquals(objectData.getFilename(), "titre thumbnail.txt"); + } + + @Test + public void should_return_null_when_filemodel_is_absent_from_all_qualifiers() + throws IOException, InvalidParseOperationException, VitamClientException { + // Given + ObjectData objectData = new ObjectData(); + RequestResponse<JsonNode> jsonNodeRequestResponse = buildGot("data/vitam_got_full_qualifiers_without_filemodel.json"); + ResultsDto resultsDto = buildResults(jsonNodeRequestResponse); + // When + when(unitService.findObjectMetadataById(any(), any())) + .thenReturn(jsonNodeRequestResponse); + when(archivesSearchService.findObjectById(any(), any())) + .thenReturn(ResponseEntity.of(Optional.of(resultsDto))); + String usage = archivesSearchService.getUsage(resultsDto, objectData); + + // Then + assertEquals(usage, ObjectQualifierTypeEnum.BINARYMASTER.getValue()); + assertNull(objectData.getFilename()); + } private ResultsDto buildResults(RequestResponse<JsonNode> jsonNodeRequestResponse) throws IOException { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); diff --git a/ui/ui-archive-search/src/test/resources/data/vitam_got_dissemination.json b/ui/ui-archive-search/src/test/resources/data/vitam_got_dissemination.json index 8516824977b4a2e9b2d02f8d7690b3bf447fa8e9..6529e9468dcf7e58e93328271257dd7df2dbb3b9 100644 --- a/ui/ui-archive-search/src/test/resources/data/vitam_got_dissemination.json +++ b/ui/ui-archive-search/src/test/resources/data/vitam_got_dissemination.json @@ -15,6 +15,30 @@ "#id": "aebaaaaaaahl2zz5ab23malq4gw2cnqaaaba", "#nbobjects": 1, "#qualifiers": [ + { + "qualifier": "BinaryMaster", + "#nbc": 1, + "versions": [ + { + "DataObjectGroupId": "aebaaaaaaahl2zz5ab23malq4gw2cnqaaaba", + "DataObjectVersion": "BinaryMaster_1", + "FormatIdentification": { + "FormatLitteral": "Plain Text File", + "MimeType": "text/plain", + "FormatId": "x-fmt/111" + }, + "Size": 6, + "Uri": "Content/ID35.txt", + "MessageDigest": "664ac614a819df2a97d2a5df57dcad91d6ec38b0fffc793e80c56b4553a14ac7a5f0bce3bb71af419b0bb8f151ad3d512867454eeb818e01818a31989c13319b", + "Algorithm": "SHA-512", + "#id": "aeaaaaaaaahl2zz5ab23malq4gw2cnqaaaaq", + "#opi": "aeeaaaaaachf2vysaau5malrcg7nsjqaaaaq", + "#storage": { + "strategyId": "default" + } + } + ] + }, { "qualifier": "Dissemination", "_nbc": 1, diff --git a/ui/ui-archive-search/src/test/resources/data/vitam_got_full.json b/ui/ui-archive-search/src/test/resources/data/vitam_got_full.json new file mode 100644 index 0000000000000000000000000000000000000000..2999f14b3de0a96a3c6a99bf338ec703b32a5436 --- /dev/null +++ b/ui/ui-archive-search/src/test/resources/data/vitam_got_full.json @@ -0,0 +1,100 @@ +{ + "httpCode": 200, + "$hits": { + "total": 1, + "offset": 0, + "limit": 0, + "size": 1 + }, + "$results": [ + { + "FileInfo": { + "Filename": "Pereire.txt", + "LastModified": "2017-04-04T08:07:27.825+02:00" + }, + "#id": "aebaaaaaaahl2zz5ab23malq4gw2cnqaaaba", + "#nbobjects": 1, + "#qualifiers": [ + { + "qualifier": "BinaryMaster", + "_nbc": 1, + "versions": [ + { + "_id": "aeaaaaaaaahly3l5ab7vwalzlvsew3aaaaaq", + "DataObjectGroupId": "aebaaaaaaehly3l5ab7vwalzlvsew5iaaaaq", + "DataObjectVersion": "BinaryMaster_1", + "FormatIdentification": { + "FormatLitteral": "Plain Text File", + "MimeType": "text/plain", + "FormatId": "x-fmt/111" + }, + "_opi": "aeeaaaaaaghly3l5aad6ialzlvsdclaaaaaq", + "Size": 6, + "Uri": "Content/ID13.txt", + "MessageDigest": "86c0bc701ef6b5dd21b080bc5bb2af38097baa6237275da83a52f092c9eae3e4e4b0247391620bd732fe824d18bd3bb6c37e62ec73a8cf3585c6a799399861b1", + "Algorithm": "SHA-512", + "_storage": { + "strategyId": "default" + } + } + ] + }, + { + "qualifier": "Dissemination", + "_nbc": 1, + "versions": [ + { + "_id": "aeaaaaaaaahlju6xaayh6alycfih5ziaaaba", + "DataObjectGroupId": "aebaaaaaaahlju6xaayh6alycfih5ziaaaaq", + "DataObjectVersion": "Dissemination_1", + "FormatIdentification": { + "FormatLitteral": "Portable Network Graphics", + "MimeType": "image/png", + "FormatId": "fmt/12" + }, + "FileInfo": { + "Filename": "titre dissemination", + "LastModified": "2016-06-03T15:28:00.000+02:00" + }, + "_opi": "aeeaaaaaachlju6xabk74alycfihj7qaaaaq", + "Size": 57850, + "Uri": "Content/0f1ddc38a1eb38d401e394c057db3f2ebc646fd1cd0c06e7dc680c19d89c05f74815cbf27399fafe111192bcb4c0e246186cc8cc430c6ff7fe52a7fdbd2110f7.png", + "MessageDigest": "0f1ddc38a1eb38d401e394c057db3f2ebc646fd1cd0c06e7dc680c19d89c05f74815cbf27399fafe111192bcb4c0e246186cc8cc430c6ff7fe52a7fdbd2110f7", + "Algorithm": "SHA-512", + "_storage": { + "strategyId": "default" + } + } + ] + } + ], + "#type": "", + "#tenant": 0, + "#unitups": [ + "aeaqaaaaaahl2zz5ab23malq4gw2eqqaaaba" + ], + "#allunitups": [ + ], + "#operations": [ + "aeeaaaaaachf2vysaau5malrcg7nsjqaaaaq" + ], + "#opi": "aeeaaaaaachf2vysaau5malrcg7nsjqaaaaq", + "#originating_agency": "RATP", + "#originating_agencies": [ + "RATP" + ], + "#storage": { + "strategyId": "default" + }, + "#version": 1 + } + ], + "$facetResults": [], + "$context": { + "$roots": [], + "$query": [], + "$filter": {}, + "$projection": {}, + "$facets": [] + } +} diff --git a/ui/ui-archive-search/src/test/resources/data/vitam_got_full_qualifiers_without_filemodel.json b/ui/ui-archive-search/src/test/resources/data/vitam_got_full_qualifiers_without_filemodel.json new file mode 100644 index 0000000000000000000000000000000000000000..e17553fd3fa01fff61b591e156b625877f07e34c --- /dev/null +++ b/ui/ui-archive-search/src/test/resources/data/vitam_got_full_qualifiers_without_filemodel.json @@ -0,0 +1,120 @@ +{ + "httpCode": 200, + "$hits": { + "total": 1, + "offset": 0, + "limit": 0, + "size": 1 + }, + "$results": [ + { + "FileInfo": { + "Filename": "Pereire.txt", + "LastModified": "2017-04-04T08:07:27.825+02:00" + }, + "#id": "aebaaaaaaahl2zz5ab23malq4gw2cnqaaaba", + "#nbobjects": 1, + "#qualifiers": [ + { + "qualifier": "BinaryMaster", + "_nbc": 1, + "versions": [ + { + "_id": "aeaaaaaaaahly3l5ab7vwalzlvsew3aaaaaq", + "DataObjectGroupId": "aebaaaaaaehly3l5ab7vwalzlvsew5iaaaaq", + "DataObjectVersion": "BinaryMaster_1", + "FormatIdentification": { + "FormatLitteral": "Plain Text File", + "MimeType": "text/plain", + "FormatId": "x-fmt/111" + }, + "_opi": "aeeaaaaaaghly3l5aad6ialzlvsdclaaaaaq", + "Size": 6, + "Uri": "Content/ID13.txt", + "MessageDigest": "86c0bc701ef6b5dd21b080bc5bb2af38097baa6237275da83a52f092c9eae3e4e4b0247391620bd732fe824d18bd3bb6c37e62ec73a8cf3585c6a799399861b1", + "Algorithm": "SHA-512", + "_storage": { + "strategyId": "default" + } + } + ] + }, + { + "qualifier": "Dissemination", + "_nbc": 1, + "versions": [ + { + "_id": "aeaaaaaaaahlju6xaayh6alycfih5ziaaaba", + "DataObjectGroupId": "aebaaaaaaahlju6xaayh6alycfih5ziaaaaq", + "DataObjectVersion": "Dissemination_1", + "FormatIdentification": { + "FormatLitteral": "Portable Network Graphics", + "MimeType": "image/png", + "FormatId": "fmt/12" + }, + "_opi": "aeeaaaaaachlju6xabk74alycfihj7qaaaaq", + "Size": 57850, + "Uri": "Content/0f1ddc38a1eb38d401e394c057db3f2ebc646fd1cd0c06e7dc680c19d89c05f74815cbf27399fafe111192bcb4c0e246186cc8cc430c6ff7fe52a7fdbd2110f7.png", + "MessageDigest": "0f1ddc38a1eb38d401e394c057db3f2ebc646fd1cd0c06e7dc680c19d89c05f74815cbf27399fafe111192bcb4c0e246186cc8cc430c6ff7fe52a7fdbd2110f7", + "Algorithm": "SHA-512", + "_storage": { + "strategyId": "default" + } + } + ] + }, + { + "qualifier": "Thumbnail", + "_nbc": 1, + "versions": [ + { + "_id": "aeaaaaaaaahlju6xaayh6alycfih54qaaaba", + "DataObjectGroupId": "aebaaaaaaahlju6xaayh6alycfih5ziaaaaq", + "DataObjectVersion": "Thumbnail_1", + "FormatIdentification": { + "FormatLitteral": "JPEG File Interchange Format", + "MimeType": "image/jpeg", + "FormatId": "fmt/44" + }, + "_opi": "aeeaaaaaachlju6xabk74alycfihj7qaaaaq", + "Size": 44266, + "Uri": "Content/04a5b5a5db9a4505d75f024af9379d0fc9b1d50f0eff8a6f1a7caa299a689639b57e4ace0f562643ab0822f7ea33e0539635fb8201a1bfacaab4210cd7236b82.jpg", + "MessageDigest": "04a5b5a5db9a4505d75f024af9379d0fc9b1d50f0eff8a6f1a7caa299a689639b57e4ace0f562643ab0822f7ea33e0539635fb8201a1bfacaab4210cd7236b82", + "Algorithm": "SHA-512", + "_storage": { + "strategyId": "default" + } + } + ] + } + ], + "#type": "", + "#tenant": 0, + "#unitups": [ + "aeaqaaaaaahl2zz5ab23malq4gw2eqqaaaba" + ], + "#allunitups": [ + ], + "#operations": [ + "aeeaaaaaachf2vysaau5malrcg7nsjqaaaaq" + ], + "#opi": "aeeaaaaaachf2vysaau5malrcg7nsjqaaaaq", + "#originating_agency": "RATP", + "#originating_agencies": [ + "RATP" + ], + "#storage": { + "strategyId": "default" + }, + "#version": 1 + } + ], + "$facetResults": [], + "$context": { + "$roots": [], + "$query": [], + "$filter": {}, + "$projection": {}, + "$facets": [] + } +} diff --git a/ui/ui-archive-search/src/test/resources/data/vitam_got_full_with_thumbs.json b/ui/ui-archive-search/src/test/resources/data/vitam_got_full_with_thumbs.json new file mode 100644 index 0000000000000000000000000000000000000000..f73ecfeed1f3267e5e7c537d0b5094ba8fb67afe --- /dev/null +++ b/ui/ui-archive-search/src/test/resources/data/vitam_got_full_with_thumbs.json @@ -0,0 +1,124 @@ +{ + "httpCode": 200, + "$hits": { + "total": 1, + "offset": 0, + "limit": 0, + "size": 1 + }, + "$results": [ + { + "FileInfo": { + "Filename": "Pereire.txt", + "LastModified": "2017-04-04T08:07:27.825+02:00" + }, + "#id": "aebaaaaaaahl2zz5ab23malq4gw2cnqaaaba", + "#nbobjects": 1, + "#qualifiers": [ + { + "qualifier": "BinaryMaster", + "_nbc": 1, + "versions": [ + { + "_id": "aeaaaaaaaahly3l5ab7vwalzlvsew3aaaaaq", + "DataObjectGroupId": "aebaaaaaaehly3l5ab7vwalzlvsew5iaaaaq", + "DataObjectVersion": "BinaryMaster_1", + "FormatIdentification": { + "FormatLitteral": "Plain Text File", + "MimeType": "text/plain", + "FormatId": "x-fmt/111" + }, + "_opi": "aeeaaaaaaghly3l5aad6ialzlvsdclaaaaaq", + "Size": 6, + "Uri": "Content/ID13.txt", + "MessageDigest": "86c0bc701ef6b5dd21b080bc5bb2af38097baa6237275da83a52f092c9eae3e4e4b0247391620bd732fe824d18bd3bb6c37e62ec73a8cf3585c6a799399861b1", + "Algorithm": "SHA-512", + "_storage": { + "strategyId": "default" + } + } + ] + }, + { + "qualifier": "Dissemination", + "_nbc": 1, + "versions": [ + { + "_id": "aeaaaaaaaahlju6xaayh6alycfih5ziaaaba", + "DataObjectGroupId": "aebaaaaaaahlju6xaayh6alycfih5ziaaaaq", + "DataObjectVersion": "Dissemination_1", + "FormatIdentification": { + "FormatLitteral": "Portable Network Graphics", + "MimeType": "image/png", + "FormatId": "fmt/12" + }, + "_opi": "aeeaaaaaachlju6xabk74alycfihj7qaaaaq", + "Size": 57850, + "Uri": "Content/0f1ddc38a1eb38d401e394c057db3f2ebc646fd1cd0c06e7dc680c19d89c05f74815cbf27399fafe111192bcb4c0e246186cc8cc430c6ff7fe52a7fdbd2110f7.png", + "MessageDigest": "0f1ddc38a1eb38d401e394c057db3f2ebc646fd1cd0c06e7dc680c19d89c05f74815cbf27399fafe111192bcb4c0e246186cc8cc430c6ff7fe52a7fdbd2110f7", + "Algorithm": "SHA-512", + "_storage": { + "strategyId": "default" + } + } + ] + }, + { + "qualifier": "Thumbnail", + "_nbc": 1, + "versions": [ + { + "_id": "aeaaaaaaaahlju6xaayh6alycfih54qaaaba", + "DataObjectGroupId": "aebaaaaaaahlju6xaayh6alycfih5ziaaaaq", + "DataObjectVersion": "Thumbnail_1", + "FormatIdentification": { + "FormatLitteral": "JPEG File Interchange Format", + "MimeType": "image/jpeg", + "FormatId": "fmt/44" + }, + "FileInfo": { + "Filename": "titre thumbnail.txt", + "LastModified": "2016-06-03T15:28:00.000+02:00" + }, + "_opi": "aeeaaaaaachlju6xabk74alycfihj7qaaaaq", + "Size": 44266, + "Uri": "Content/04a5b5a5db9a4505d75f024af9379d0fc9b1d50f0eff8a6f1a7caa299a689639b57e4ace0f562643ab0822f7ea33e0539635fb8201a1bfacaab4210cd7236b82.jpg", + "MessageDigest": "04a5b5a5db9a4505d75f024af9379d0fc9b1d50f0eff8a6f1a7caa299a689639b57e4ace0f562643ab0822f7ea33e0539635fb8201a1bfacaab4210cd7236b82", + "Algorithm": "SHA-512", + "_storage": { + "strategyId": "default" + } + } + ] + } + ], + "#type": "", + "#tenant": 0, + "#unitups": [ + "aeaqaaaaaahl2zz5ab23malq4gw2eqqaaaba" + ], + "#allunitups": [ + ], + "#operations": [ + "aeeaaaaaachf2vysaau5malrcg7nsjqaaaaq" + ], + "#opi": "aeeaaaaaachf2vysaau5malrcg7nsjqaaaaq", + "#originating_agency": "RATP", + "#originating_agencies": [ + "RATP" + ], + "#storage": { + "strategyId": "default" + }, + "#version": 1 + } + ], + "$facetResults": [], + "$context": { + "$roots": [], + "$query": [], + "$filter": {}, + "$projection": {}, + "$facets": [] + } +}