From 74ceacd90625ca38151dd28ce31de1a935509dc7 Mon Sep 17 00:00:00 2001 From: Passam KASSEM <passam.kassem@focati-solutions.com> Date: Wed, 11 Aug 2021 23:59:14 +0200 Subject: [PATCH] [VAS] Item 8243-8453 : Retours PR --- .../dto/AccessionRegisterDetailDto.java | 2 +- .../referential/common/rest/RestApi.java | 2 - .../common/service/VitamRuleService.java | 146 +++++++++++------- ...ssionRegisterDetailExternalRestClient.java | 14 +- ...ionRegisterSummaryExternalRestClient.java} | 13 +- .../ReferentialExternalRestClientFactory.java | 4 +- .../referential-external/pom.xml | 2 +- .../config/ApiReferentialServerConfig.java | 2 +- ...ssionRegisterDetailExternalController.java | 80 ---------- .../AccessionRegisterExternalController.java | 35 +++-- ...ccessionRegisterDetailExternalService.java | 6 +- ...essionRegisterSummaryExternalService.java} | 20 ++- ...essionRegisterExternalControllerTest.java} | 24 +-- ...ssionRegisterDetailInternalRestClient.java | 2 +- ...ionRegisterSummaryInternalRestClient.java} | 11 +- .../ReferentialInternalRestClientFactory.java | 4 +- .../AccessionRegisterDetailConverter.java | 2 +- ...ccessionRegisterDetailInternalService.java | 2 +- .../AccessionRegisterSummaryConverter.java} | 6 +- ...essionRegisterSummaryInternalService.java} | 11 +- ...ssionRegisterDetailInternalController.java | 84 ---------- .../AccessionRegisterInternalController.java | 58 +++++-- .../server/SwaggerJsonFileGenerationTest.java | 4 +- ...nRegisterDetailInternalControllerTest.java | 18 ++- ...sionRegisterDetailInternalServiceTest.java | 2 +- .../commons/api/domain/ServicesData.java | 8 +- .../AbstractMockMvcCrudControllerTest.java | 10 ++ .../vitam/api/administration/RuleService.java | 50 +++--- .../vitam/api/model/RuleMeasurementEnum.java | 114 -------------- .../api/administration/RuleServiceTest.java | 102 ++++++------ .../roles/vitamui/files/customer-init.yml | 2 +- .../mongod/1.0.0/318_application_ref.js.j2 | 4 +- .../mongod/1.0.0/319_security_ref.js.j2 | 2 +- .../scripts/mongod/1.0.0/320_iam_ref.js.j2 | 2 +- .../logbook-operation-facet.component.html | 18 +-- .../logbook-operation-facet.component.scss | 10 -- .../logbook-operation-facet.component.ts | 18 --- ...rch-bar-with-sibling-button.component.scss | 0 ...earch-bar-with-sibling-button.component.ts | 1 - .../accession-register-detail.ts | 29 ++++ .../accession-register-status.ts} | 0 .../accession-register-summary.ts} | 4 +- .../access-register}/accession-register.ts | 2 +- .../access-register}/index.ts | 7 +- .../register-value-detail-model.ts | 0 .../register-value-event-model.ts | 9 ++ .../src/app/modules/models/index.ts | 1 + .../src/app/modules/pipes/bytes.pipe.spec.ts | 14 +- .../src/app/modules/pipes/bytes.pipe.ts | 19 ++- .../accession-register-list.component.html | 68 +++++--- .../accession-register-list.component.scss | 11 -- .../accession-register-list.component.ts | 12 +- .../accession-status.pipe.spec.ts | 16 -- .../accession-status.pipe.ts | 21 --- .../accession-register-routing.module.ts | 10 +- .../accession-register.business.ts | 59 ------- .../accession-register.component.html | 8 +- .../accession-register.component.scss | 0 .../accession-register.component.spec.ts | 128 --------------- .../accession-register.component.ts | 15 +- .../accession-register.module.ts | 59 ++++--- .../accession-register.service.ts | 52 +++++-- .../referential/src/app/app-routing.module.ts | 85 +++++----- .../audit-create/audit-create.component.html | 14 +- .../audit-create/audit-create.component.ts | 129 +++++++++------- .../src/app/audit/audit.service.ts | 127 ++++++++------- .../accession-register-api.service.spec.ts | 61 -------- ... accession-register-detail-api.service.ts} | 26 ++-- ...ssion-register-details-api.service.spec.ts | 25 --- ...accession-register-summary-api.service.ts} | 18 +-- ...k-management-operation-list.component.scss | 11 -- ...ogbook-management-operation.component.scss | 12 +- .../referential/src/assets/i18n/en.json | 5 + .../referential/src/assets/i18n/fr.json | 5 + .../projects/referential/src/sass/styles.scss | 10 ++ .../lib/models/accession-registers-detail.ts | 25 --- .../src/lib/models/accession-registers.ts | 7 - .../lib/models/register-value-event-model.ts | 10 -- .../vitamui-library/src/public-api.ts | 1 - ui/ui-referential/pom.xml | 2 +- .../ReferentialContextConfiguration.java | 4 +- .../rest/AccessionRegisterController.java | 36 +++-- .../AccessionRegisterDetailController.java | 86 ----------- .../AccessionRegisterDetailService.java | 1 - ...a => AccessionRegisterSummaryService.java} | 8 +- .../SwaggerJsonFileGenerationTest.java | 2 +- ...a => AccessionRegisterControllerTest.java} | 22 +-- 87 files changed, 817 insertions(+), 1354 deletions(-) rename api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/{AccessionRegisterExternalRestClient.java => AccessionRegisterSummaryExternalRestClient.java} (85%) delete mode 100644 api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterDetailExternalController.java rename api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/{AccessionRegisterExternalService.java => AccessionRegisterSummaryExternalService.java} (79%) rename api/api-referential/referential-external/src/test/java/fr/gouv/vitamui/referential/external/server/rest/{AccessionRegisterDetailExternalControllerTest.java => AccessionRegisterExternalControllerTest.java} (82%) rename api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/{AccessionRegisterInternalRestClient.java => AccessionRegisterSummaryInternalRestClient.java} (86%) rename api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/{ => details}/AccessionRegisterDetailConverter.java (99%) rename api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/{ => details}/AccessionRegisterDetailInternalService.java (99%) rename api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/{AccessionRegisterConverter.java => summary/AccessionRegisterSummaryConverter.java} (94%) rename api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/{AccessionRegisterInternalService.java => summary/AccessionRegisterSummaryInternalService.java} (90%) delete mode 100644 api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterDetailInternalController.java delete mode 100644 commons/commons-vitam/src/main/java/fr/gouv/vitamui/commons/vitam/api/model/RuleMeasurementEnum.java delete mode 100644 ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/search-bar-with-sibling-button.component.scss create mode 100644 ui/ui-frontend-common/src/app/modules/models/access-register/accession-register-detail.ts rename ui/{ui-frontend/projects/vitamui-library/src/lib/models/accession-registers-status.ts => ui-frontend-common/src/app/modules/models/access-register/accession-register-status.ts} (100%) rename ui/{ui-frontend/projects/vitamui-library/src/lib/models/accession-registe-summary.ts => ui-frontend-common/src/app/modules/models/access-register/accession-register-summary.ts} (73%) rename ui/{ui-frontend/projects/vitamui-library/src/lib/models => ui-frontend-common/src/app/modules/models/access-register}/accession-register.ts (85%) rename ui/ui-frontend-common/src/app/modules/{components/search-bar-with-sibling-button => models/access-register}/index.ts (87%) rename ui/{ui-frontend/projects/vitamui-library/src/lib/models => ui-frontend-common/src/app/modules/models/access-register}/register-value-detail-model.ts (100%) create mode 100644 ui/ui-frontend-common/src/app/modules/models/access-register/register-value-event-model.ts delete mode 100644 ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-status.pipe.spec.ts delete mode 100644 ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-status.pipe.ts delete mode 100644 ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.business.ts delete mode 100644 ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.scss delete mode 100644 ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.spec.ts delete mode 100644 ui/ui-frontend/projects/referential/src/app/core/api/accession-register-api.service.spec.ts rename ui/ui-frontend/projects/referential/src/app/core/api/{accession-register-details-api.service.ts => accession-register-detail-api.service.ts} (70%) delete mode 100644 ui/ui-frontend/projects/referential/src/app/core/api/accession-register-details-api.service.spec.ts rename ui/ui-frontend/projects/referential/src/app/core/api/{accession-register-api.service.ts => accession-register-summary-api.service.ts} (81%) delete mode 100644 ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers-detail.ts delete mode 100644 ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers.ts delete mode 100644 ui/ui-frontend/projects/vitamui-library/src/lib/models/register-value-event-model.ts delete mode 100644 ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/rest/AccessionRegisterDetailController.java rename ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/{AccessionRegisterService.java => AccessionRegisterSummaryService.java} (90%) rename ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/rest/{AccessionRegisterDetailControllerTest.java => AccessionRegisterControllerTest.java} (69%) diff --git a/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/dto/AccessionRegisterDetailDto.java b/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/dto/AccessionRegisterDetailDto.java index 7d33fc3c0..6ebd5de0e 100644 --- a/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/dto/AccessionRegisterDetailDto.java +++ b/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/dto/AccessionRegisterDetailDto.java @@ -68,7 +68,7 @@ public class AccessionRegisterDetailDto extends AccessionRegisterDto { private String opType; - private String AcquisitionInformation; + private String acquisitionInformation; private List<RegisterValueEventModel> events; diff --git a/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/rest/RestApi.java b/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/rest/RestApi.java index b9546e73a..2ab69fea4 100644 --- a/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/rest/RestApi.java +++ b/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/rest/RestApi.java @@ -73,8 +73,6 @@ public abstract class RestApi { public static final String ACCESSION_REGISTER_URL = PREFIX + "/accession-register"; - public static final String ACCESSION_REGISTER_DETAIL_URL = PREFIX + "/accessionregisterdetails"; - public static final String PROFILES_URL = PREFIX + "/profile"; public static final String SEARCH_PATH = "/search"; diff --git a/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/service/VitamRuleService.java b/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/service/VitamRuleService.java index 415fd35fd..b924ebfd7 100644 --- a/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/service/VitamRuleService.java +++ b/api/api-referential/referential-commons/src/main/java/fr/gouv/vitamui/referential/common/service/VitamRuleService.java @@ -38,36 +38,37 @@ package fr.gouv.vitamui.referential.common.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.dataformat.csv.CsvMapper; import com.fasterxml.jackson.dataformat.csv.CsvSchema; -import fr.gouv.vitam.common.exception.InvalidParseOperationException; -import fr.gouv.vitam.common.model.administration.RuleMeasurementEnum; -import fr.gouv.vitam.common.model.administration.RuleType; -import fr.gouv.vitam.common.model.logbook.LogbookOperation; -import fr.gouv.vitamui.commons.api.exception.*; -import fr.gouv.vitamui.commons.vitam.api.dto.LogbookOperationsResponseDto; -import fr.gouv.vitamui.commons.vitam.api.dto.RuleNodeResponseDto; -import fr.gouv.vitamui.referential.common.dsl.VitamQueryHelper; -import fr.gouv.vitamui.referential.common.dto.*; -import org.springframework.beans.factory.annotation.Autowired; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - import fr.gouv.vitam.access.external.client.AccessExternalClient; import fr.gouv.vitam.access.external.client.AdminExternalClient; import fr.gouv.vitam.access.external.common.exception.AccessExternalClientException; import fr.gouv.vitam.common.client.VitamContext; import fr.gouv.vitam.common.database.builder.request.exception.InvalidCreateOperationException; import fr.gouv.vitam.common.database.builder.request.single.Select; +import fr.gouv.vitam.common.exception.InvalidParseOperationException; import fr.gouv.vitam.common.exception.VitamClientException; import fr.gouv.vitam.common.model.RequestResponse; import fr.gouv.vitam.common.model.administration.FileRulesModel; +import fr.gouv.vitam.common.model.administration.RuleMeasurementEnum; +import fr.gouv.vitam.common.model.administration.RuleType; +import fr.gouv.vitam.common.model.logbook.LogbookOperation; +import fr.gouv.vitamui.commons.api.exception.BadRequestException; +import fr.gouv.vitamui.commons.api.exception.ConflictException; +import fr.gouv.vitamui.commons.api.exception.PreconditionFailedException; +import fr.gouv.vitamui.commons.api.exception.UnavailableServiceException; +import fr.gouv.vitamui.commons.api.exception.UnexpectedDataException; import fr.gouv.vitamui.commons.api.logger.VitamUILogger; import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; -import fr.gouv.vitamui.commons.rest.util.RestUtils; +import fr.gouv.vitamui.commons.vitam.api.dto.LogbookOperationsResponseDto; +import fr.gouv.vitamui.commons.vitam.api.dto.RuleNodeResponseDto; import fr.gouv.vitamui.commons.vitam.api.util.VitamRestUtils; +import fr.gouv.vitamui.referential.common.dsl.VitamQueryHelper; +import fr.gouv.vitamui.referential.common.dto.RuleCSVDto; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.web.multipart.MultipartFile; @@ -76,14 +77,12 @@ import javax.xml.bind.JAXBException; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.util.*; +import java.util.List; import java.util.stream.Collectors; -import org.apache.commons.io.IOUtils; -import java.nio.charset.StandardCharsets; public class VitamRuleService { - private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance(VitamRuleService.class); + private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance(VitamRuleService.class); private final AdminExternalClient adminExternalClient; @@ -92,26 +91,30 @@ public class VitamRuleService { private ObjectMapper objectMapper; @Autowired - public VitamRuleService(AdminExternalClient adminExternalClient, ObjectMapper objectMapper, AccessExternalClient accessExternalClient) { + public VitamRuleService(AdminExternalClient adminExternalClient, ObjectMapper objectMapper, + AccessExternalClient accessExternalClient) { this.adminExternalClient = adminExternalClient; this.objectMapper = objectMapper; this.accessExternalClient = accessExternalClient; } - public RequestResponse<FileRulesModel> findRules(final VitamContext vitamContext, final JsonNode select) throws VitamClientException { - final RequestResponse<FileRulesModel> response = adminExternalClient.findRules(vitamContext, select); - VitamRestUtils.checkResponse(response); - return response; + public RequestResponse<FileRulesModel> findRules(final VitamContext vitamContext, final JsonNode select) + throws VitamClientException { + final RequestResponse<FileRulesModel> response = adminExternalClient.findRules(vitamContext, select); + VitamRestUtils.checkResponse(response); + return response; } - public RequestResponse<FileRulesModel> findRuleById(final VitamContext vitamContext, final String ruleId) throws VitamClientException { - final RequestResponse<FileRulesModel> response = adminExternalClient.findRuleById(vitamContext, ruleId); - VitamRestUtils.checkResponse(response); - return response; + public RequestResponse<FileRulesModel> findRuleById(final VitamContext vitamContext, final String ruleId) + throws VitamClientException { + final RequestResponse<FileRulesModel> response = adminExternalClient.findRuleById(vitamContext, ruleId); + VitamRestUtils.checkResponse(response); + return response; } /** * Patch only fields that can be updated + * * @param ruleToPatch * @param fieldsToApply */ @@ -144,7 +147,8 @@ public class VitamRuleService { } public boolean patchRule(final VitamContext vitamContext, final String ruleId, FileRulesModel patchRule) - throws InvalidParseOperationException, AccessExternalClientException, VitamClientException, IOException, JAXBException { + throws InvalidParseOperationException, AccessExternalClientException, VitamClientException, IOException, + JAXBException { RequestResponse<FileRulesModel> requestResponse = findRules(vitamContext, new Select().getFinalSelect()); final List<FileRulesModel> actualRules = objectMapper @@ -154,12 +158,12 @@ public class VitamRuleService { LOGGER.debug("Actual rules before patching : {}", actualRules); actualRules.stream() - .filter( rule -> ruleId.equals(rule.getRuleId()) ) - .forEach( rule -> { + .filter(rule -> ruleId.equals(rule.getRuleId())) + .forEach(rule -> { LOGGER.debug("Rule before patching {}", rule); this.patchFields(rule, patchRule); LOGGER.debug("Rule after patching {}", rule); - } ); + }); LOGGER.debug("Actual rules after patching : {}", actualRules); @@ -169,24 +173,27 @@ public class VitamRuleService { } public boolean deleteRule(final VitamContext vitamContext, final String ruleId) - throws InvalidParseOperationException, AccessExternalClientException, VitamClientException, IOException, JAXBException { + throws InvalidParseOperationException, AccessExternalClientException, VitamClientException, IOException, + JAXBException { RequestResponse<FileRulesModel> requestResponse = findRules(vitamContext, new Select().getFinalSelect()); final List<FileRulesModel> actualRules = objectMapper .treeToValue(requestResponse.toJsonNode(), RuleNodeResponseDto.class).getResults(); - List<FileRulesModel> newRulesList = actualRules.stream().filter( rule -> !ruleId.equals(rule.getRuleId()) ).collect(Collectors.toList()); + List<FileRulesModel> newRulesList = + actualRules.stream().filter(rule -> !ruleId.equals(rule.getRuleId())).collect(Collectors.toList()); RequestResponse response = importRules(vitamContext, newRulesList); return checkImportRulesResponse(response); } public boolean createRule(final VitamContext vitamContext, FileRulesModel newRule) - throws InvalidParseOperationException, AccessExternalClientException, VitamClientException, IOException, JAXBException { + throws InvalidParseOperationException, AccessExternalClientException, VitamClientException, IOException, + JAXBException { RequestResponse<FileRulesModel> requestResponse = findRules(vitamContext, new Select().getFinalSelect()); final List<FileRulesModel> actualRules = objectMapper - .treeToValue(requestResponse.toJsonNode(), RuleNodeResponseDto.class).getResults(); + .treeToValue(requestResponse.toJsonNode(), RuleNodeResponseDto.class).getResults(); LOGGER.debug("Before Add List: {}", actualRules); @@ -202,8 +209,9 @@ public class VitamRuleService { private RequestResponse importRules(final VitamContext vitamContext, final List<FileRulesModel> rulesModels) throws InvalidParseOperationException, AccessExternalClientException, IOException, JAXBException { try (ByteArrayInputStream byteArrayInputStream = serializeRules(rulesModels); - ByteArrayInputStream debugStream = serializeRules(rulesModels)) { - final RequestResponse response = adminExternalClient.createRules(vitamContext, byteArrayInputStream, "Rules.csv"); + ByteArrayInputStream debugStream = serializeRules(rulesModels)) { + final RequestResponse response = + adminExternalClient.createRules(vitamContext, byteArrayInputStream, "Rules.csv"); return response; } } @@ -229,11 +237,15 @@ public class VitamRuleService { private RuleCSVDto convertDtoToCsvDto(FileRulesModel rule) { RuleCSVDto csvDto = new RuleCSVDto(); csvDto.setRuleId(rule.getRuleId()); - csvDto.setRuleType(rule.getRuleType().name()); + if (rule.getRuleType() != null) { + csvDto.setRuleType(rule.getRuleType().name()); + } csvDto.setRuleValue(rule.getRuleValue()); csvDto.setRuleDescription(rule.getRuleDescription()); csvDto.setRuleDuration(rule.getRuleDuration()); - csvDto.setRuleMeasurement(rule.getRuleMeasurement().getType()); + if (rule.getRuleMeasurement() != null) { + csvDto.setRuleMeasurement(rule.getRuleMeasurement().getType()); + } return csvDto; } @@ -243,6 +255,7 @@ public class VitamRuleService { /** * check if all conditions are Ok to create a new rule in the tenant + * * @param rules * @return true if the rule can be created, false if the rule already exists */ @@ -255,15 +268,15 @@ public class VitamRuleService { final RequestResponse<FileRulesModel> response = findRules(vitamContext, select); if (response.getStatus() == HttpStatus.UNAUTHORIZED.value()) { throw new PreconditionFailedException("Can't create rule for the tenant : UNAUTHORIZED"); - } - else if (response.getStatus() != HttpStatus.OK.value()) { - throw new UnavailableServiceException("Can't create rule for this tenant, Vitam response code : " + response.getStatus()); + } else if (response.getStatus() != HttpStatus.OK.value()) { + throw new UnavailableServiceException( + "Can't create rule for this tenant, Vitam response code : " + response.getStatus()); } verifyRuleExistence(rules, response); - } - catch (final VitamClientException e) { - throw new UnavailableServiceException("Can't create rules for this tenant, error while calling Vitam : " + e.getMessage()); + } catch (final VitamClientException e) { + throw new UnavailableServiceException( + "Can't create rules for this tenant, error while calling Vitam : " + e.getMessage()); } return true; } @@ -272,30 +285,40 @@ public class VitamRuleService { /** * Check if rule is not already created in Vitam. + * * @param checkRules the list of rules being tested * @param existingRules the list of existing rules in Vitam */ - private void verifyRuleExistence(final List<FileRulesModel> checkRules, final RequestResponse<FileRulesModel> existingRules) { + private void verifyRuleExistence(final List<FileRulesModel> checkRules, + final RequestResponse<FileRulesModel> existingRules) { try { final ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - final RuleNodeResponseDto existingRulesDto = objectMapper.treeToValue(existingRules.toJsonNode(), RuleNodeResponseDto.class); - final List<String> checkRulesIds = checkRules.stream().map(checkRule -> checkRule.getRuleId()).collect(Collectors.toList()); + final RuleNodeResponseDto existingRulesDto = + objectMapper.treeToValue(existingRules.toJsonNode(), RuleNodeResponseDto.class); + final List<String> checkRulesIds = + checkRules.stream().map(checkRule -> checkRule.getRuleId()).collect(Collectors.toList()); // For each existing rule, test if its id matches any of the checked rules ids. - if (existingRulesDto.getResults().stream().anyMatch(existingRule -> checkRulesIds.contains(existingRule.getRuleId()))) { - throw new ConflictException("Can't create rule, a rule with the same identifier already exist in Vitam"); + if (existingRulesDto.getResults().stream() + .anyMatch(existingRule -> checkRulesIds.contains(existingRule.getRuleId()))) { + throw new ConflictException( + "Can't create rule, a rule with the same identifier already exist in Vitam"); } - } - catch (final JsonProcessingException e) { - throw new UnexpectedDataException("Can't create rule, Error while parsing Vitam response : " + e.getMessage()); + } catch (final JsonProcessingException e) { + throw new UnexpectedDataException( + "Can't create rule, Error while parsing Vitam response : " + e.getMessage()); } } - public Response export(VitamContext context) throws InvalidParseOperationException, InvalidCreateOperationException, VitamClientException { + public Response export(VitamContext context) + throws InvalidParseOperationException, InvalidCreateOperationException, VitamClientException { JsonNode query = VitamQueryHelper.getLastOperationQuery(VitamQueryHelper.RULE_IMPORT_OPERATION_TYPE); - RequestResponse<LogbookOperation> lastImportOperationResponse = accessExternalClient.selectOperations(context, query); - LogbookOperationsResponseDto lastImportOperation = VitamRestUtils.responseMapping(lastImportOperationResponse.toJsonNode(), LogbookOperationsResponseDto.class); + RequestResponse<LogbookOperation> lastImportOperationResponse = + accessExternalClient.selectOperations(context, query); + LogbookOperationsResponseDto lastImportOperation = + VitamRestUtils.responseMapping(lastImportOperationResponse.toJsonNode(), + LogbookOperationsResponseDto.class); if (lastImportOperation.getHits().getTotal() == 0) { throw new VitamClientException("Can't get a result while selecting last rule import"); @@ -305,19 +328,22 @@ public class VitamRuleService { } public RequestResponse<?> importRules(VitamContext vitamContext, String fileName, MultipartFile file) - throws InvalidParseOperationException, AccessExternalClientException, VitamClientException, IOException { + throws InvalidParseOperationException, AccessExternalClientException, VitamClientException, IOException { LOGGER.debug("Import rule file {}", fileName); return this.adminExternalClient.createRules(vitamContext, file.getInputStream(), fileName); } /** * Check if a rule import has failed or not + * * @param response: the response to check * @return true if the import successed , false otherwise */ private boolean checkImportRulesResponse(RequestResponse response) { // Check the Vitam response (if status == 200, the rule has been deleted else if status == BAD_REQUEST, Vitam has not delete the rule else, a technical exception occured) - VitamRestUtils.checkResponse(response, HttpStatus.OK.value(), HttpStatus.CREATED.value(), HttpStatus.ACCEPTED.value(), HttpStatus.BAD_REQUEST.value()); - return response.getStatus() == HttpStatus.OK.value() || response.getStatus() == HttpStatus.CREATED.value() || response.getStatus() == HttpStatus.ACCEPTED.value(); + VitamRestUtils.checkResponse(response, HttpStatus.OK.value(), HttpStatus.CREATED.value(), + HttpStatus.ACCEPTED.value(), HttpStatus.BAD_REQUEST.value()); + return response.getStatus() == HttpStatus.OK.value() || response.getStatus() == HttpStatus.CREATED.value() || + response.getStatus() == HttpStatus.ACCEPTED.value(); } } diff --git a/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterDetailExternalRestClient.java b/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterDetailExternalRestClient.java index 0739519f0..7ed908726 100644 --- a/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterDetailExternalRestClient.java +++ b/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterDetailExternalRestClient.java @@ -53,21 +53,25 @@ public class AccessionRegisterDetailExternalRestClient extends super(restTemplate, baseUrl); } - @Override protected ParameterizedTypeReference<PaginatedValuesDto<AccessionRegisterDetailDto>> getDtoPaginatedClass() { - return new ParameterizedTypeReference<>() { }; + @Override + protected ParameterizedTypeReference<PaginatedValuesDto<AccessionRegisterDetailDto>> getDtoPaginatedClass() { + return new ParameterizedTypeReference<>() { + }; } @Override public String getPathUrl() { - return RestApi.ACCESSION_REGISTER_DETAIL_URL; + return RestApi.ACCESSION_REGISTER_URL + "/details"; } - @Override protected Class<AccessionRegisterDetailDto> getDtoClass() { + @Override + protected Class<AccessionRegisterDetailDto> getDtoClass() { return AccessionRegisterDetailDto.class; } protected ParameterizedTypeReference<List<AccessionRegisterDetailDto>> getDtoListClass() { - return new ParameterizedTypeReference<>() { }; + return new ParameterizedTypeReference<>() { + }; } } diff --git a/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterExternalRestClient.java b/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterSummaryExternalRestClient.java similarity index 85% rename from api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterExternalRestClient.java rename to api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterSummaryExternalRestClient.java index 956c9db60..f383c2d20 100644 --- a/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterExternalRestClient.java +++ b/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/AccessionRegisterSummaryExternalRestClient.java @@ -45,23 +45,26 @@ import org.springframework.web.client.RestTemplate; import java.util.List; -public class AccessionRegisterExternalRestClient extends BaseCrudRestClient<AccessionRegisterSummaryDto, ExternalHttpContext> { +public class AccessionRegisterSummaryExternalRestClient + extends BaseCrudRestClient<AccessionRegisterSummaryDto, ExternalHttpContext> { - public AccessionRegisterExternalRestClient(final RestTemplate restTemplate, final String baseUrl) { + public AccessionRegisterSummaryExternalRestClient(final RestTemplate restTemplate, final String baseUrl) { super(restTemplate, baseUrl); } @Override public String getPathUrl() { - return RestApi.ACCESSION_REGISTER_URL; + return RestApi.ACCESSION_REGISTER_URL + "/summary"; } - @Override protected Class<AccessionRegisterSummaryDto> getDtoClass() { + @Override + protected Class<AccessionRegisterSummaryDto> getDtoClass() { return AccessionRegisterSummaryDto.class; } protected ParameterizedTypeReference<List<AccessionRegisterSummaryDto>> getDtoListClass() { - return new ParameterizedTypeReference<List<AccessionRegisterSummaryDto>>() { }; + return new ParameterizedTypeReference<>() { + }; } } diff --git a/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/ReferentialExternalRestClientFactory.java b/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/ReferentialExternalRestClientFactory.java index d02c11f4f..1564ff609 100644 --- a/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/ReferentialExternalRestClientFactory.java +++ b/api/api-referential/referential-external-client/src/main/java/fr/gouv/vitamui/referential/external/client/ReferentialExternalRestClientFactory.java @@ -92,8 +92,8 @@ public class ReferentialExternalRestClientFactory extends BaseRestClientFactory return new OperationExternalRestClient(getRestTemplate(), getBaseUrl()); } - public AccessionRegisterExternalRestClient getAccessionRegisterExternalRestClient() { - return new AccessionRegisterExternalRestClient(getRestTemplate(), getBaseUrl()); + public AccessionRegisterSummaryExternalRestClient getAccessionRegisterExternalRestClient() { + return new AccessionRegisterSummaryExternalRestClient(getRestTemplate(), getBaseUrl()); } public AccessionRegisterDetailExternalRestClient getAccessionRegisterDetailExternalRestClient() { diff --git a/api/api-referential/referential-external/pom.xml b/api/api-referential/referential-external/pom.xml index 0264b064d..eea535888 100644 --- a/api/api-referential/referential-external/pom.xml +++ b/api/api-referential/referential-external/pom.xml @@ -225,7 +225,7 @@ <executable>true</executable> <attach>false</attach> <!-- Need to use the original jar for integration-tests --> <mainClass>fr.gouv.vitamui.referential.external.server.ApiReferentialServerApplication</mainClass> - <jvmArguments>-Xmx512m</jvmArguments> + <jvmArguments>-Xmx512m</jvmArguments> <arguments> <!-- use src/main/config/application-dev.yml when using mvn spring-boot:run --> <!-- See : https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files --> diff --git a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/config/ApiReferentialServerConfig.java b/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/config/ApiReferentialServerConfig.java index 73b2de316..1c9912fcf 100644 --- a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/config/ApiReferentialServerConfig.java +++ b/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/config/ApiReferentialServerConfig.java @@ -174,7 +174,7 @@ public class ApiReferentialServerConfig extends AbstractContextConfiguration { } @Bean - public AccessionRegisterInternalRestClient accessionRegisterInternalRestClient(final ReferentialInternalRestClientFactory referentialInternalRestClientFactory) { + public AccessionRegisterSummaryInternalRestClient accessionRegisterInternalRestClient(final ReferentialInternalRestClientFactory referentialInternalRestClientFactory) { return referentialInternalRestClientFactory.getAccessionRegisterInternalRestClient(); } diff --git a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterDetailExternalController.java b/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterDetailExternalController.java deleted file mode 100644 index ecf5bb2fa..000000000 --- a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterDetailExternalController.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright French Prime minister Office/SGMAP/DINSIC/Vitam Program (2019-2020) - * and the signatories of the "VITAM - Accord du Contributeur" agreement. - * - * contact@programmevitam.fr - * - * This software is a computer program whose purpose is to implement - * implement a digital archiving front-office system for the secure and - * efficient high volumetry VITAM solution. - * - * This software is governed by the CeCILL-C license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-C - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -package fr.gouv.vitamui.referential.external.server.rest; - -import fr.gouv.vitamui.commons.api.domain.DirectionDto; -import fr.gouv.vitamui.commons.api.domain.PaginatedValuesDto; -import fr.gouv.vitamui.commons.api.domain.ServicesData; -import fr.gouv.vitamui.commons.api.logger.VitamUILogger; -import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; -import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailDto; -import fr.gouv.vitamui.referential.common.rest.RestApi; -import fr.gouv.vitamui.referential.external.server.service.AccessionRegisterDetailExternalService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.annotation.Secured; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Optional; - -@RestController -@RequestMapping(RestApi.ACCESSION_REGISTER_DETAIL_URL) -public class AccessionRegisterDetailExternalController { - - private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance( - AccessionRegisterDetailExternalController.class); - - private final AccessionRegisterDetailExternalService accessionRegisterDetailExternalService; - - @Autowired - public AccessionRegisterDetailExternalController( - AccessionRegisterDetailExternalService accessionRegisterDetailExternalService) { - this.accessionRegisterDetailExternalService = accessionRegisterDetailExternalService; - } - - @Secured(ServicesData.ROLE_GET_ACCESSION_REGISTER) - @GetMapping(params = { "page", "size" }) - public PaginatedValuesDto<AccessionRegisterDetailDto> getAllPaginated(@RequestParam final Integer page, @RequestParam final Integer size, - @RequestParam(required = false) final Optional<String> criteria, @RequestParam(required = false) final Optional<String> orderBy, - @RequestParam(required = false) final Optional<DirectionDto> direction) { - LOGGER.debug("getPaginateEntities page={}, size={}, criteria={}, orderBy={}, ascendant={}", page, size, criteria, orderBy, direction); - return accessionRegisterDetailExternalService.getAllPaginated(page, size, criteria, orderBy, direction); - } - -} diff --git a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterExternalController.java b/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterExternalController.java index 6802e98e5..6748f3cf5 100644 --- a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterExternalController.java +++ b/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterExternalController.java @@ -36,15 +36,17 @@ */ package fr.gouv.vitamui.referential.external.server.rest; +import fr.gouv.vitamui.commons.api.domain.DirectionDto; +import fr.gouv.vitamui.commons.api.domain.PaginatedValuesDto; import fr.gouv.vitamui.commons.api.domain.ServicesData; import fr.gouv.vitamui.commons.api.logger.VitamUILogger; import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; import fr.gouv.vitamui.commons.rest.util.RestUtils; +import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailDto; import fr.gouv.vitamui.referential.common.dto.AccessionRegisterSummaryDto; import fr.gouv.vitamui.referential.common.rest.RestApi; -import fr.gouv.vitamui.referential.external.server.service.AccessionRegisterExternalService; -import lombok.Getter; -import lombok.Setter; +import fr.gouv.vitamui.referential.external.server.service.AccessionRegisterDetailExternalService; +import fr.gouv.vitamui.referential.external.server.service.AccessionRegisterSummaryExternalService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.annotation.Secured; import org.springframework.web.bind.annotation.GetMapping; @@ -57,21 +59,36 @@ import java.util.Optional; @RestController @RequestMapping(RestApi.ACCESSION_REGISTER_URL) -@Getter -@Setter public class AccessionRegisterExternalController { private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance(AccessionRegisterExternalController.class); + private final AccessionRegisterSummaryExternalService accessionRegisterSummaryExternalService; + private final AccessionRegisterDetailExternalService accessionRegisterDetailExternalService; + @Autowired - private AccessionRegisterExternalService accessionRegisterExternalService; + public AccessionRegisterExternalController( + AccessionRegisterSummaryExternalService accessionRegisterSummaryExternalService, + AccessionRegisterDetailExternalService accessionRegisterDetailExternalService) { + this.accessionRegisterSummaryExternalService = accessionRegisterSummaryExternalService; + this.accessionRegisterDetailExternalService = accessionRegisterDetailExternalService; + } - @GetMapping() + @GetMapping("/summary") @Secured(ServicesData.ROLE_GET_OPERATIONS) - public Collection<AccessionRegisterSummaryDto> getAll(@RequestParam final Optional<String> criteria) { + public Collection<AccessionRegisterSummaryDto> getAccessionRegisterSummaries(@RequestParam final Optional<String> criteria) { LOGGER.debug("get all accessionRegister criteria={}", criteria); RestUtils.checkCriteria(criteria); - return accessionRegisterExternalService.getAll(criteria); + return accessionRegisterSummaryExternalService.getAll(criteria); + } + + @Secured(ServicesData.ROLE_GET_ACCESSION_REGISTER_DETAIL) + @GetMapping(value = "/details", params = { "page", "size" }) + public PaginatedValuesDto<AccessionRegisterDetailDto> getAccessionRegisterDetailsPaginated(@RequestParam final Integer page, @RequestParam final Integer size, + @RequestParam(required = false) final Optional<String> criteria, @RequestParam(required = false) final Optional<String> orderBy, + @RequestParam(required = false) final Optional<DirectionDto> direction) { + LOGGER.debug("getPaginateEntities page={}, size={}, criteria={}, orderBy={}, ascendant={}", page, size, criteria, orderBy, direction); + return accessionRegisterDetailExternalService.getAllPaginated(page, size, criteria, orderBy, direction); } } diff --git a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterDetailExternalService.java b/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterDetailExternalService.java index df7d3043d..1ee189fd6 100644 --- a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterDetailExternalService.java +++ b/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterDetailExternalService.java @@ -64,13 +64,15 @@ public class AccessionRegisterDetailExternalService extends } @Override - public PaginatedValuesDto<AccessionRegisterDetailDto> getAllPaginated(final Integer page, final Integer size, final Optional<String> criteria, + public PaginatedValuesDto<AccessionRegisterDetailDto> getAllPaginated(final Integer page, final Integer size, + final Optional<String> criteria, final Optional<String> orderBy, final Optional<DirectionDto> direction) { ParameterChecker.checkPagination(size, page); return getClient().getAllPaginated(getInternalHttpContext(), page, size, criteria, orderBy, direction); } - @Override protected BasePaginatingAndSortingRestClient<AccessionRegisterDetailDto, InternalHttpContext> getClient() { + @Override + protected BasePaginatingAndSortingRestClient<AccessionRegisterDetailDto, InternalHttpContext> getClient() { return accessionRegisterDetailInternalRestClient; } diff --git a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterExternalService.java b/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterSummaryExternalService.java similarity index 79% rename from api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterExternalService.java rename to api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterSummaryExternalService.java index c2c1c71e8..be84e1faf 100644 --- a/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterExternalService.java +++ b/api/api-referential/referential-external/src/main/java/fr/gouv/vitamui/referential/external/server/service/AccessionRegisterSummaryExternalService.java @@ -41,34 +41,32 @@ import fr.gouv.vitamui.commons.rest.client.InternalHttpContext; import fr.gouv.vitamui.iam.security.client.AbstractInternalClientService; import fr.gouv.vitamui.iam.security.service.ExternalSecurityService; import fr.gouv.vitamui.referential.common.dto.AccessionRegisterSummaryDto; -import fr.gouv.vitamui.referential.internal.client.AccessionRegisterInternalRestClient; -import lombok.Getter; -import lombok.Setter; +import fr.gouv.vitamui.referential.internal.client.AccessionRegisterSummaryInternalRestClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Optional; -@Getter -@Setter @Service -public class AccessionRegisterExternalService extends AbstractInternalClientService { +public class AccessionRegisterSummaryExternalService extends AbstractInternalClientService { - @Autowired - private AccessionRegisterInternalRestClient accessionRegisterInternalRestClient; + private final AccessionRegisterSummaryInternalRestClient accessionRegisterSummaryInternalRestClient; - public AccessionRegisterExternalService(@Autowired ExternalSecurityService externalSecurityService) { + @Autowired + public AccessionRegisterSummaryExternalService(ExternalSecurityService externalSecurityService, + AccessionRegisterSummaryInternalRestClient accessionRegisterSummaryInternalRestClient) { super(externalSecurityService); + this.accessionRegisterSummaryInternalRestClient = accessionRegisterSummaryInternalRestClient; } public List<AccessionRegisterSummaryDto> getAll(final Optional<String> criteria) { - return accessionRegisterInternalRestClient.getAll(getInternalHttpContext(), criteria); + return accessionRegisterSummaryInternalRestClient.getAll(getInternalHttpContext(), criteria); } @Override protected BaseRestClient<InternalHttpContext> getClient() { - return accessionRegisterInternalRestClient; + return accessionRegisterSummaryInternalRestClient; } } diff --git a/api/api-referential/referential-external/src/test/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterDetailExternalControllerTest.java b/api/api-referential/referential-external/src/test/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterExternalControllerTest.java similarity index 82% rename from api/api-referential/referential-external/src/test/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterDetailExternalControllerTest.java rename to api/api-referential/referential-external/src/test/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterExternalControllerTest.java index 387df6fe0..654583118 100644 --- a/api/api-referential/referential-external/src/test/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterDetailExternalControllerTest.java +++ b/api/api-referential/referential-external/src/test/java/fr/gouv/vitamui/referential/external/server/rest/AccessionRegisterExternalControllerTest.java @@ -43,6 +43,7 @@ import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailDto; import fr.gouv.vitamui.referential.common.rest.RestApi; import fr.gouv.vitamui.referential.external.server.service.AccessionRegisterDetailExternalService; +import fr.gouv.vitamui.referential.external.server.service.AccessionRegisterSummaryExternalService; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; @@ -57,20 +58,23 @@ import static org.mockito.Mockito.verify; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(SpringExtension.class) -@WebMvcTest(controllers = { AccessionRegisterDetailExternalController.class }) -class AccessionRegisterDetailExternalControllerTest extends ApiReferentialControllerTest<AccessionRegisterDetailDto> { +@WebMvcTest(controllers = { AccessionRegisterExternalController.class }) +class AccessionRegisterExternalControllerTest extends ApiReferentialControllerTest<AccessionRegisterDetailDto> { @MockBean - private AccessionRegisterDetailExternalService accessionRegisterDetailExternalService; + private AccessionRegisterDetailExternalService detailExternalService; + + @MockBean + private AccessionRegisterSummaryExternalService summaryExternalService; @Test void should_call_the_corresponding_service_once_when_paginated_api_is_called() throws Exception { - //Given //When - ResultActions resultActions = super.testGetPaginatedEntities(); + //Given // When + ResultActions resultActions = testGetPaginatedEntities("/details", getHeaders()); //Then resultActions.andExpect(status().isOk()); - verify(accessionRegisterDetailExternalService, times(1)).getAllPaginated(any(), any(), any(), any(), any()); + verify(detailExternalService, times(1)).getAllPaginated(any(), any(), any(), any(), any()); } @Override @@ -80,23 +84,23 @@ class AccessionRegisterDetailExternalControllerTest extends ApiReferentialContro @Override protected VitamUILogger getLog() { - return VitamUILoggerFactory.getInstance(AccessionRegisterDetailExternalController.class); + return VitamUILoggerFactory.getInstance(AccessionRegisterExternalController.class); } @Override protected void preparedServices() { PaginatedValuesDto<AccessionRegisterDetailDto> response = new PaginatedValuesDto<>(); - doReturn(response).when(accessionRegisterDetailExternalService).getAllPaginated(any(), any(), any(), any(), any()); + doReturn(response).when(detailExternalService).getAllPaginated(any(), any(), any(), any(), any()); } @Override protected String getRessourcePrefix() { - return RestApi.ACCESSION_REGISTER_DETAIL_URL; + return RestApi.ACCESSION_REGISTER_URL; } @Override protected String[] getServices() { - return new String[] { ServicesData.ROLE_GET_ACCESSION_REGISTER }; + return new String[] { ServicesData.ROLE_GET_ACCESSION_REGISTER_DETAIL}; } @Override diff --git a/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterDetailInternalRestClient.java b/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterDetailInternalRestClient.java index a414c4082..57ca74a6e 100644 --- a/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterDetailInternalRestClient.java +++ b/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterDetailInternalRestClient.java @@ -58,7 +58,7 @@ public class AccessionRegisterDetailInternalRestClient extends BasePaginatingAnd @Override public String getPathUrl() { - return RestApi.ACCESSION_REGISTER_DETAIL_URL; + return RestApi.ACCESSION_REGISTER_URL + "/details"; } @Override protected Class<AccessionRegisterDetailDto> getDtoClass() { diff --git a/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterInternalRestClient.java b/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterSummaryInternalRestClient.java similarity index 86% rename from api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterInternalRestClient.java rename to api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterSummaryInternalRestClient.java index b96eb8832..7f190a67c 100644 --- a/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterInternalRestClient.java +++ b/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/AccessionRegisterSummaryInternalRestClient.java @@ -45,9 +45,10 @@ import org.springframework.web.client.RestTemplate; import java.util.List; -public class AccessionRegisterInternalRestClient extends BaseCrudRestClient<AccessionRegisterSummaryDto, InternalHttpContext> { +public class AccessionRegisterSummaryInternalRestClient + extends BaseCrudRestClient<AccessionRegisterSummaryDto, InternalHttpContext> { - public AccessionRegisterInternalRestClient(final RestTemplate restTemplate, final String baseUrl) { + public AccessionRegisterSummaryInternalRestClient(final RestTemplate restTemplate, final String baseUrl) { super(restTemplate, baseUrl); } @@ -56,12 +57,14 @@ public class AccessionRegisterInternalRestClient extends BaseCrudRestClient<Acc return RestApi.ACCESSION_REGISTER_URL; } - @Override protected Class<AccessionRegisterSummaryDto> getDtoClass() { + @Override + protected Class<AccessionRegisterSummaryDto> getDtoClass() { return AccessionRegisterSummaryDto.class; } protected ParameterizedTypeReference<List<AccessionRegisterSummaryDto>> getDtoListClass() { - return new ParameterizedTypeReference<List<AccessionRegisterSummaryDto>>() { }; + return new ParameterizedTypeReference<>() { + }; } } diff --git a/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/ReferentialInternalRestClientFactory.java b/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/ReferentialInternalRestClientFactory.java index a38d80e21..be30a5241 100644 --- a/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/ReferentialInternalRestClientFactory.java +++ b/api/api-referential/referential-internal-client/src/main/java/fr/gouv/vitamui/referential/internal/client/ReferentialInternalRestClientFactory.java @@ -90,8 +90,8 @@ public class ReferentialInternalRestClientFactory extends BaseRestClientFactory return new OperationInternalRestClient(getRestTemplate(), getBaseUrl()); } - public AccessionRegisterInternalRestClient getAccessionRegisterInternalRestClient() { - return new AccessionRegisterInternalRestClient(getRestTemplate(), getBaseUrl()); + public AccessionRegisterSummaryInternalRestClient getAccessionRegisterInternalRestClient() { + return new AccessionRegisterSummaryInternalRestClient(getRestTemplate(), getBaseUrl()); } public UnitInternalRestClient getUnitInternalRestClient() { diff --git a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterDetailConverter.java b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/details/AccessionRegisterDetailConverter.java similarity index 99% rename from api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterDetailConverter.java rename to api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/details/AccessionRegisterDetailConverter.java index 73fd7dc8a..20d79e2be 100644 --- a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterDetailConverter.java +++ b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/details/AccessionRegisterDetailConverter.java @@ -34,7 +34,7 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -package fr.gouv.vitamui.referential.internal.server.accessionregister; +package fr.gouv.vitamui.referential.internal.server.accessionregister.details; import fr.gouv.vitam.common.model.administration.AccessionRegisterDetailModel; import fr.gouv.vitamui.commons.utils.VitamUIUtils; diff --git a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterDetailInternalService.java b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/details/AccessionRegisterDetailInternalService.java similarity index 99% rename from api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterDetailInternalService.java rename to api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/details/AccessionRegisterDetailInternalService.java index aae347e74..e669cf6c6 100644 --- a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterDetailInternalService.java +++ b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/details/AccessionRegisterDetailInternalService.java @@ -34,7 +34,7 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -package fr.gouv.vitamui.referential.internal.server.accessionregister; +package fr.gouv.vitamui.referential.internal.server.accessionregister.details; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; diff --git a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterConverter.java b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/summary/AccessionRegisterSummaryConverter.java similarity index 94% rename from api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterConverter.java rename to api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/summary/AccessionRegisterSummaryConverter.java index 3a8e409a9..d4e434266 100644 --- a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterConverter.java +++ b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/summary/AccessionRegisterSummaryConverter.java @@ -34,7 +34,7 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -package fr.gouv.vitamui.referential.internal.server.accessionregister; +package fr.gouv.vitamui.referential.internal.server.accessionregister.summary; import fr.gouv.vitam.common.model.administration.AccessionRegisterSummaryModel; import fr.gouv.vitamui.commons.utils.VitamUIUtils; @@ -43,12 +43,12 @@ import fr.gouv.vitamui.referential.common.dto.AccessionRegisterSummaryDto; import java.util.List; import java.util.stream.Collectors; -public class AccessionRegisterConverter { +public class AccessionRegisterSummaryConverter { public static AccessionRegisterSummaryDto convertVitamToDto(final AccessionRegisterSummaryModel accessionRegisterSummaryModel) { return VitamUIUtils.copyProperties(accessionRegisterSummaryModel, new AccessionRegisterSummaryDto()); } public static List<AccessionRegisterSummaryDto> convertVitamsToDtos(final List<AccessionRegisterSummaryModel> accessionRegisterSummaryModels) { - return accessionRegisterSummaryModels.stream().map(AccessionRegisterConverter::convertVitamToDto).collect(Collectors.toList()); + return accessionRegisterSummaryModels.stream().map(AccessionRegisterSummaryConverter::convertVitamToDto).collect(Collectors.toList()); } } diff --git a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterInternalService.java b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/summary/AccessionRegisterSummaryInternalService.java similarity index 90% rename from api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterInternalService.java rename to api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/summary/AccessionRegisterSummaryInternalService.java index f2113a9e2..6cc4577b0 100644 --- a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/AccessionRegisterInternalService.java +++ b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/accessionregister/summary/AccessionRegisterSummaryInternalService.java @@ -34,7 +34,7 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -package fr.gouv.vitamui.referential.internal.server.accessionregister; +package fr.gouv.vitamui.referential.internal.server.accessionregister.summary; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -54,16 +54,17 @@ import org.springframework.stereotype.Service; import java.util.List; @Service -public class AccessionRegisterInternalService { +public class AccessionRegisterSummaryInternalService { - private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance(AccessionRegisterInternalService.class); + private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance( + AccessionRegisterSummaryInternalService.class); final private AccessionRegisterService accessionRegisterService; private ObjectMapper objectMapper; @Autowired - AccessionRegisterInternalService(AccessionRegisterService accessionRegisterService, ObjectMapper objectMapper) { + AccessionRegisterSummaryInternalService(AccessionRegisterService accessionRegisterService, ObjectMapper objectMapper) { this.accessionRegisterService = accessionRegisterService; this.objectMapper = objectMapper; } @@ -76,7 +77,7 @@ public class AccessionRegisterInternalService { requestResponse = accessionRegisterService.findAccessionRegisterSummary(context); final AccessionRegisterSummaryResponseDto accessionRegisterSymbolicResponseDto = objectMapper .treeToValue(requestResponse.toJsonNode(), AccessionRegisterSummaryResponseDto.class); - return AccessionRegisterConverter.convertVitamsToDtos(accessionRegisterSymbolicResponseDto.getResults()); + return AccessionRegisterSummaryConverter.convertVitamsToDtos(accessionRegisterSymbolicResponseDto.getResults()); } catch (JsonProcessingException | VitamClientException e) { throw new InternalServerException("Unable to find accessionRegisterSymbolic", e); } diff --git a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterDetailInternalController.java b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterDetailInternalController.java deleted file mode 100644 index d9f29e403..000000000 --- a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterDetailInternalController.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright French Prime minister Office/SGMAP/DINSIC/Vitam Program (2019-2020) - * and the signatories of the "VITAM - Accord du Contributeur" agreement. - * - * contact@programmevitam.fr - * - * This software is a computer program whose purpose is to implement - * implement a digital archiving front-office system for the secure and - * efficient high volumetry VITAM solution. - * - * This software is governed by the CeCILL-C license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-C - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -package fr.gouv.vitamui.referential.internal.server.rest; - -import fr.gouv.vitam.common.client.VitamContext; -import fr.gouv.vitamui.commons.api.domain.DirectionDto; -import fr.gouv.vitamui.commons.api.domain.PaginatedValuesDto; -import fr.gouv.vitamui.commons.api.logger.VitamUILogger; -import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; -import fr.gouv.vitamui.iam.security.service.InternalSecurityService; -import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailDto; -import fr.gouv.vitamui.referential.common.rest.RestApi; -import fr.gouv.vitamui.referential.internal.server.accessionregister.AccessionRegisterDetailInternalService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Optional; - -@RestController -@RequestMapping(RestApi.ACCESSION_REGISTER_DETAIL_URL) -public class AccessionRegisterDetailInternalController { - - private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance( - AccessionRegisterDetailInternalController.class); - - private final AccessionRegisterDetailInternalService accessionRegisterDetailInternalService; - - private final InternalSecurityService securityService; - - @Autowired - public AccessionRegisterDetailInternalController( - AccessionRegisterDetailInternalService accessionRegisterDetailInternalService, - InternalSecurityService securityService) { - this.accessionRegisterDetailInternalService = accessionRegisterDetailInternalService; - this.securityService = securityService; - } - - @GetMapping(params = { "page", "size" }) - public PaginatedValuesDto<AccessionRegisterDetailDto> getAllPaginated(@RequestParam final Integer page, @RequestParam final Integer size, - @RequestParam(required = false) final Optional<String> criteria, @RequestParam(required = false) final Optional<String> orderBy, - @RequestParam(required = false) final Optional<DirectionDto> direction) { - LOGGER.debug("getPaginateEntities accession registers page={}, size={}, criteria={}, orderBy={}, ascendant={}", page, size, criteria, orderBy, direction); - final VitamContext vitamContext = securityService.buildVitamContext(securityService.getTenantIdentifier()); - return accessionRegisterDetailInternalService.getAllPaginated(page, size, orderBy, direction,vitamContext, criteria); - } - -} diff --git a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterInternalController.java b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterInternalController.java index 41afc53d4..6c2f97110 100644 --- a/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterInternalController.java +++ b/api/api-referential/referential-internal/src/main/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterInternalController.java @@ -38,42 +38,68 @@ package fr.gouv.vitamui.referential.internal.server.rest; import fr.gouv.vitam.common.client.VitamContext; import fr.gouv.vitamui.commons.api.CommonConstants; +import fr.gouv.vitamui.commons.api.domain.DirectionDto; +import fr.gouv.vitamui.commons.api.domain.PaginatedValuesDto; import fr.gouv.vitamui.commons.api.logger.VitamUILogger; import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; import fr.gouv.vitamui.commons.rest.util.RestUtils; import fr.gouv.vitamui.iam.security.service.InternalSecurityService; +import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailDto; import fr.gouv.vitamui.referential.common.dto.AccessionRegisterSummaryDto; import fr.gouv.vitamui.referential.common.rest.RestApi; -import fr.gouv.vitamui.referential.internal.server.accessionregister.AccessionRegisterInternalService; -import lombok.Getter; -import lombok.Setter; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; +import fr.gouv.vitamui.referential.internal.server.accessionregister.details.AccessionRegisterDetailInternalService; +import fr.gouv.vitamui.referential.internal.server.accessionregister.summary.AccessionRegisterSummaryInternalService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import java.util.Collection; import java.util.Optional; @RestController @RequestMapping(RestApi.ACCESSION_REGISTER_URL) -@Getter -@Setter public class AccessionRegisterInternalController { - private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance(AccessionRegisterInternalController.class); + private static final VitamUILogger LOGGER = + VitamUILoggerFactory.getInstance(AccessionRegisterInternalController.class); - @Autowired - private AccessionRegisterInternalService accessionRegisterInternalService; + private final AccessionRegisterSummaryInternalService summaryInternalService; - @Autowired - private InternalSecurityService securityService; + private final AccessionRegisterDetailInternalService detailInternalService; - @GetMapping() + private final InternalSecurityService securityService; + + public AccessionRegisterInternalController( + AccessionRegisterSummaryInternalService accessionRegisterSummaryInternalService, + AccessionRegisterDetailInternalService accessionRegisterDetailInternalService, + InternalSecurityService securityService) { + this.summaryInternalService = accessionRegisterSummaryInternalService; + this.detailInternalService = accessionRegisterDetailInternalService; + this.securityService = securityService; + } + + @GetMapping("/summary") public Collection<AccessionRegisterSummaryDto> getAll(@RequestParam final Optional<String> criteria, - @RequestHeader(value = CommonConstants.X_ACCESS_CONTRACT_ID_HEADER) String accessContractId) { + @RequestHeader(value = CommonConstants.X_ACCESS_CONTRACT_ID_HEADER) String accessContractId) { LOGGER.debug("get all customer criteria={}", criteria); RestUtils.checkCriteria(criteria); - final VitamContext vitamContext = securityService.buildVitamContext(securityService.getTenantIdentifier(), accessContractId); - return accessionRegisterInternalService.getAll(vitamContext); + final VitamContext vitamContext = + securityService.buildVitamContext(securityService.getTenantIdentifier(), accessContractId); + return summaryInternalService.getAll(vitamContext); + } + + @GetMapping(value = "/details", params = {"page", "size"}) + public PaginatedValuesDto<AccessionRegisterDetailDto> getAllPaginated(@RequestParam final Integer page, + @RequestParam final Integer size, + @RequestParam(required = false) final Optional<String> criteria, + @RequestParam(required = false) final Optional<String> orderBy, + @RequestParam(required = false) final Optional<DirectionDto> direction) { + LOGGER.debug("getPaginateEntities accession registers page={}, size={}, criteria={}, orderBy={}, ascendant={}", + page, size, criteria, orderBy, direction); + final VitamContext vitamContext = securityService.buildVitamContext(securityService.getTenantIdentifier()); + return detailInternalService.getAllPaginated(page, size, orderBy, direction, vitamContext, criteria); } } diff --git a/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/SwaggerJsonFileGenerationTest.java b/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/SwaggerJsonFileGenerationTest.java index 3e230c533..fb68a21e7 100644 --- a/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/SwaggerJsonFileGenerationTest.java +++ b/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/SwaggerJsonFileGenerationTest.java @@ -45,7 +45,7 @@ import fr.gouv.vitamui.commons.rest.configuration.SwaggerConfiguration; import fr.gouv.vitamui.commons.test.rest.AbstractSwaggerJsonFileGenerationTest; import fr.gouv.vitamui.iam.security.service.InternalSecurityService; import fr.gouv.vitamui.referential.internal.server.accesscontract.AccessContractInternalService; -import fr.gouv.vitamui.referential.internal.server.accessionregister.AccessionRegisterInternalService; +import fr.gouv.vitamui.referential.internal.server.accessionregister.summary.AccessionRegisterSummaryInternalService; import fr.gouv.vitamui.referential.internal.server.agency.AgencyInternalService; import fr.gouv.vitamui.referential.internal.server.logbookmanagement.LogbookManagementOperationInternalService; import fr.gouv.vitamui.referential.internal.server.managementcontract.ManagementContractInternalService; @@ -117,7 +117,7 @@ public class SwaggerJsonFileGenerationTest extends AbstractSwaggerJsonFileGenera private OperationInternalService operationInternalService; @MockBean - private AccessionRegisterInternalService accessionRegisterInternalService; + private AccessionRegisterSummaryInternalService accessionRegisterSummaryInternalService; @MockBean private AuthenticationProvider authenticationProvider; diff --git a/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterDetailInternalControllerTest.java b/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterDetailInternalControllerTest.java index 30610adcf..ba4c22244 100644 --- a/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterDetailInternalControllerTest.java +++ b/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/rest/AccessionRegisterDetailInternalControllerTest.java @@ -42,7 +42,8 @@ import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; import fr.gouv.vitamui.iam.security.service.InternalSecurityService; import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailDto; import fr.gouv.vitamui.referential.common.rest.RestApi; -import fr.gouv.vitamui.referential.internal.server.accessionregister.AccessionRegisterDetailInternalService; +import fr.gouv.vitamui.referential.internal.server.accessionregister.details.AccessionRegisterDetailInternalService; +import fr.gouv.vitamui.referential.internal.server.accessionregister.summary.AccessionRegisterSummaryInternalService; import fr.gouv.vitamui.referential.internal.server.common.rest.ApiReferentialControllerTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -58,11 +59,14 @@ import static org.mockito.Mockito.verify; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(SpringExtension.class) -@WebMvcTest(controllers = { AccessionRegisterDetailInternalController.class }) +@WebMvcTest(controllers = { AccessionRegisterInternalController.class }) class AccessionRegisterDetailInternalControllerTest extends ApiReferentialControllerTest<AccessionRegisterDetailDto> { @MockBean - AccessionRegisterDetailInternalService accessionRegisterDetailInternalService; + AccessionRegisterSummaryInternalService summaryInternalService; + + @MockBean + AccessionRegisterDetailInternalService detailInternalService; @MockBean public InternalSecurityService securityService; @@ -70,11 +74,11 @@ class AccessionRegisterDetailInternalControllerTest extends ApiReferentialContro @Test void should_call_the_corresponding_service_once_when_paginated_api_is_called() throws Exception { //Given //When - ResultActions resultActions = super.testGetPaginatedEntities(); + ResultActions resultActions = super.testGetPaginatedEntities("/details", getHeaders()); //Then resultActions.andExpect(status().isOk()); - verify(accessionRegisterDetailInternalService, times(1)).getAllPaginated(any(), any(), any(), any(), any(), any()); + verify(detailInternalService, times(1)).getAllPaginated(any(), any(), any(), any(), any(), any()); } @Override @@ -100,11 +104,11 @@ class AccessionRegisterDetailInternalControllerTest extends ApiReferentialContro @Override protected void preparedServices() { PaginatedValuesDto<AccessionRegisterDetailDto> response = new PaginatedValuesDto<>(); - doReturn(response).when(accessionRegisterDetailInternalService).getAllPaginated(any(), any(), any(), any(), any(), any()); + doReturn(response).when(detailInternalService).getAllPaginated(any(), any(), any(), any(), any(), any()); } @Override protected String getRessourcePrefix() { - return RestApi.ACCESSION_REGISTER_DETAIL_URL; + return RestApi.ACCESSION_REGISTER_URL; } } diff --git a/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/service/AccessionRegisterDetailInternalServiceTest.java b/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/service/AccessionRegisterDetailInternalServiceTest.java index e40a4c1ac..f1b11dc33 100644 --- a/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/service/AccessionRegisterDetailInternalServiceTest.java +++ b/api/api-referential/referential-internal/src/test/java/fr/gouv/vitamui/referential/internal/server/service/AccessionRegisterDetailInternalServiceTest.java @@ -52,7 +52,7 @@ import fr.gouv.vitamui.commons.api.logger.VitamUILogger; import fr.gouv.vitamui.commons.vitam.api.administration.AgencyService; import fr.gouv.vitamui.referential.common.dsl.VitamQueryHelper; import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailResponseDto; -import fr.gouv.vitamui.referential.internal.server.accessionregister.AccessionRegisterDetailInternalService; +import fr.gouv.vitamui.referential.internal.server.accessionregister.details.AccessionRegisterDetailInternalService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; diff --git a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/domain/ServicesData.java b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/domain/ServicesData.java index 79331cb09..0a150834a 100644 --- a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/domain/ServicesData.java +++ b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/domain/ServicesData.java @@ -405,9 +405,9 @@ public class ServicesData { public static final String ROLE_SEARCH_ACCESS_CONTRACT_EXTERNAL_PARAM_PROFILE = "ROLE_SEARCH_" + ACCESS_CONTRACT_EXTERNAL_PARAM_PROFILE; - public static final String ACCESSION_REGISTER = "ACCESSION_REGISTER"; + public static final String ACCESSION_REGISTER_DETAIL = "ACCESSION_REGISTER_DETAIL"; - public static final String ROLE_GET_ACCESSION_REGISTER = GET_ROLE_PREFIX + ACCESSION_REGISTER; + public static final String ROLE_GET_ACCESSION_REGISTER_DETAIL = GET_ROLE_PREFIX + ACCESSION_REGISTER_DETAIL; //@formatter:off @@ -522,7 +522,7 @@ public class ServicesData { ROLE_SEARCH_ACCESS_CONTRACT_EXTERNAL_PARAM_PROFILE, ROLE_GET_ALL_LOGBOOK_OPERATION, - ROLE_GET_ACCESSION_REGISTER + ROLE_GET_ACCESSION_REGISTER_DETAIL ); @@ -660,7 +660,7 @@ public class ServicesData { ROLE_SEARCH_ACCESS_CONTRACT_EXTERNAL_PARAM_PROFILE, ROLE_GET_ALL_LOGBOOK_OPERATION, - ROLE_GET_ACCESSION_REGISTER + ROLE_GET_ACCESSION_REGISTER_DETAIL ); //@formatter:on diff --git a/commons/commons-test/src/test/java/fr/gouv/vitamui/commons/test/rest/AbstractMockMvcCrudControllerTest.java b/commons/commons-test/src/test/java/fr/gouv/vitamui/commons/test/rest/AbstractMockMvcCrudControllerTest.java index 775dd3e5a..0fc43a37a 100644 --- a/commons/commons-test/src/test/java/fr/gouv/vitamui/commons/test/rest/AbstractMockMvcCrudControllerTest.java +++ b/commons/commons-test/src/test/java/fr/gouv/vitamui/commons/test/rest/AbstractMockMvcCrudControllerTest.java @@ -331,6 +331,16 @@ public abstract class AbstractMockMvcCrudControllerTest<T extends IdDto> extends return testGetPaginatedEntities(httpHeaders,builder); } + public ResultActions testGetPaginatedEntities(String path, HttpHeaders httpHeaders) { + getLog().debug("test get paginated entities class ={}", getDtoClass().getName()); + preparedServices(); + final UriComponentsBuilder builder = getUriBuilder(); + builder.queryParam("page", 0); + builder.queryParam("size", "20"); + builder.path(path); + return testGetPaginatedEntities(httpHeaders,builder); + } + public ResultActions testGetPaginatedEntities(final HttpHeaders httpHeaders,final QueryDto criteria) { getLog().debug("test get paginated entities class ={}", getDtoClass().getName()); preparedServices(); diff --git a/commons/commons-vitam/src/main/java/fr/gouv/vitamui/commons/vitam/api/administration/RuleService.java b/commons/commons-vitam/src/main/java/fr/gouv/vitamui/commons/vitam/api/administration/RuleService.java index 3cefe7867..11d0f6b00 100644 --- a/commons/commons-vitam/src/main/java/fr/gouv/vitamui/commons/vitam/api/administration/RuleService.java +++ b/commons/commons-vitam/src/main/java/fr/gouv/vitamui/commons/vitam/api/administration/RuleService.java @@ -36,16 +36,10 @@ */ package fr.gouv.vitamui.commons.vitam.api.administration; -import java.io.InputStream; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; - import fr.gouv.vitam.access.external.client.AdminExternalClient; import fr.gouv.vitam.access.external.common.exception.AccessExternalClientException; import fr.gouv.vitam.common.client.VitamContext; @@ -56,9 +50,13 @@ import fr.gouv.vitam.common.exception.InvalidParseOperationException; import fr.gouv.vitam.common.exception.VitamClientException; import fr.gouv.vitam.common.model.RequestResponse; import fr.gouv.vitam.common.model.administration.FileRulesModel; +import fr.gouv.vitam.common.model.administration.RuleMeasurementEnum; import fr.gouv.vitamui.commons.api.exception.UnexpectedDataException; import fr.gouv.vitamui.commons.vitam.api.dto.RuleNodeResponseDto; -import fr.gouv.vitamui.commons.vitam.api.model.RuleMeasurementEnum; +import org.springframework.beans.factory.annotation.Autowired; + +import java.io.InputStream; +import java.util.Optional; public class RuleService { @@ -75,31 +73,31 @@ public class RuleService { @SuppressWarnings("rawtypes") public RequestResponse uploadRules(final VitamContext vitamContext, final InputStream rules, final String filename) - throws VitamClientException, AccessExternalClientException, InvalidParseOperationException { + throws VitamClientException, AccessExternalClientException, InvalidParseOperationException { return adminExternalClient.createRules(vitamContext, rules, filename); } - public RequestResponse<FileRulesModel> findRules(final VitamContext vitamContext, final JsonNode select) throws VitamClientException { + public RequestResponse<FileRulesModel> findRules(final VitamContext vitamContext, final JsonNode select) + throws VitamClientException { return adminExternalClient.findRules(vitamContext, select); } public Optional<Long> findRulesDurationByRuleId(final VitamContext vitamContext, final String ruleId) - throws VitamClientException, InvalidCreateOperationException, JsonProcessingException { - final Select select = new Select(); - select.setQuery(QueryHelper.eq("RuleId", ruleId)); - RequestResponse<FileRulesModel> rulesVitamResponse = - this.findRules(vitamContext, select.getFinalSelect()); - if (rulesVitamResponse.isOk()) { - RuleNodeResponseDto ruleNodeResponseDto = objectMapper - .treeToValue(rulesVitamResponse.toJsonNode(), RuleNodeResponseDto.class); - FileRulesModel rule = ruleNodeResponseDto.getResults().get(0); - if (RuleMeasurementEnum.YEAR.equals(RuleMeasurementEnum.getEnumFromType(rule.getRuleMeasurement().getType()))) { - return Optional.of(Long.parseLong(rule.getRuleDuration())); - } - else { - throw new UnexpectedDataException("The rule duration measurement should be in years."); - } - } - return Optional.empty(); + throws VitamClientException, InvalidCreateOperationException, JsonProcessingException { + final Select select = new Select(); + select.setQuery(QueryHelper.eq("RuleId", ruleId)); + RequestResponse<FileRulesModel> rulesVitamResponse = + this.findRules(vitamContext, select.getFinalSelect()); + if (rulesVitamResponse.isOk()) { + RuleNodeResponseDto ruleNodeResponseDto = objectMapper + .treeToValue(rulesVitamResponse.toJsonNode(), RuleNodeResponseDto.class); + FileRulesModel rule = ruleNodeResponseDto.getResults().get(0); + if (RuleMeasurementEnum.YEAR.equals(rule.getRuleMeasurement())) { + return Optional.of(Long.parseLong(rule.getRuleDuration())); + } else { + throw new UnexpectedDataException("The rule duration measurement should be in years."); + } + } + return Optional.empty(); } } diff --git a/commons/commons-vitam/src/main/java/fr/gouv/vitamui/commons/vitam/api/model/RuleMeasurementEnum.java b/commons/commons-vitam/src/main/java/fr/gouv/vitamui/commons/vitam/api/model/RuleMeasurementEnum.java deleted file mode 100644 index cf91d7176..000000000 --- a/commons/commons-vitam/src/main/java/fr/gouv/vitamui/commons/vitam/api/model/RuleMeasurementEnum.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * Copyright French Prime minister Office/SGMAP/DINSIC/Vitam Program (2019-2020) - * and the signatories of the "VITAM - Accord du Contributeur" agreement. - * - * contact@programmevitam.fr - * - * This software is a computer program whose purpose is to implement - * implement a digital archiving front-office system for the secure and - * efficient high volumetry VITAM solution. - * - * This software is governed by the CeCILL-C license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-C - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -package fr.gouv.vitamui.commons.vitam.api.model; - -import java.time.temporal.ChronoUnit; -import java.time.temporal.TemporalUnit; -import java.util.Calendar; - -/** - * Enum for Rule Measurement - */ -public enum RuleMeasurementEnum { - - /** - * Month - */ - MONTH("month", Calendar.MONTH, ChronoUnit.MONTHS), - /** - * Day - */ - DAY("day", Calendar.DAY_OF_MONTH, ChronoUnit.DAYS), - /** - * Year - */ - YEAR("year", Calendar.YEAR, ChronoUnit.YEARS), - /** - * Second - */ - SECOND("second", Calendar.SECOND, ChronoUnit.SECONDS); - - private final String type; - private final int calendarUnitType; - private final TemporalUnit temporalUnit; - - - /** - * Constructor - */ - RuleMeasurementEnum(String ruleMeasurement, int calendarUnitType, - TemporalUnit temporalUnit) { - type = ruleMeasurement; - this.calendarUnitType = calendarUnitType; - this.temporalUnit = temporalUnit; - } - - - /** - * - * @return the type of the measure - */ - public String getType() { - return type; - } - - /** - * - * @return the Calendar Unit Type - */ - public int getCalendarUnitType() { - return calendarUnitType; - } - - /** - * @param type - * @return the associated RuleMeasurementEnum according to parameter - */ - - public static RuleMeasurementEnum getEnumFromType(String type) { - for (final RuleMeasurementEnum e : values()) { - if (e.getType().equalsIgnoreCase(type)) { - return e; - } - } - return null; - } - - public TemporalUnit getTemporalUnit() { - return temporalUnit; - } -} diff --git a/commons/commons-vitam/src/test/java/fr/gouv/vitamui/commons/vitam/api/administration/RuleServiceTest.java b/commons/commons-vitam/src/test/java/fr/gouv/vitamui/commons/vitam/api/administration/RuleServiceTest.java index 12a09ca17..d0207e0ea 100644 --- a/commons/commons-vitam/src/test/java/fr/gouv/vitamui/commons/vitam/api/administration/RuleServiceTest.java +++ b/commons/commons-vitam/src/test/java/fr/gouv/vitamui/commons/vitam/api/administration/RuleServiceTest.java @@ -1,9 +1,15 @@ package fr.gouv.vitamui.commons.vitam.api.administration; -import static org.mockito.Mockito.when; - -import java.util.Optional; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import fr.gouv.vitam.access.external.client.AdminExternalClient; +import fr.gouv.vitam.common.client.VitamContext; +import fr.gouv.vitam.common.database.builder.request.exception.InvalidCreateOperationException; +import fr.gouv.vitam.common.exception.VitamClientException; +import fr.gouv.vitam.common.model.RequestResponseOK; +import fr.gouv.vitam.common.model.administration.FileRulesModel; +import fr.gouv.vitam.common.model.administration.RuleMeasurementEnum; +import fr.gouv.vitamui.commons.api.exception.UnexpectedDataException; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -13,77 +19,73 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import java.util.Optional; -import fr.gouv.vitam.access.external.client.AdminExternalClient; -import fr.gouv.vitam.common.client.VitamContext; -import fr.gouv.vitam.common.database.builder.request.exception.InvalidCreateOperationException; -import fr.gouv.vitam.common.exception.VitamClientException; -import fr.gouv.vitam.common.model.RequestResponseOK; -import fr.gouv.vitam.common.model.administration.FileRulesModel; -import fr.gouv.vitamui.commons.api.exception.UnexpectedDataException; -import fr.gouv.vitamui.commons.vitam.api.model.RuleMeasurementEnum; +import static org.mockito.Mockito.when; public class RuleServiceTest { - @Mock - private AdminExternalClient adminExternalClient; + @Mock + private AdminExternalClient adminExternalClient; - @InjectMocks - private RuleService ruleService; + @InjectMocks + private RuleService ruleService; - private static final String RULE_ID = "FC-1"; + private static final String RULE_ID = "FC-1"; - private static final int TENANT_IDENTIFIER = 9; + private static final int TENANT_IDENTIFIER = 9; - private static final Long RULE_DURATION = 10L; + private static final Long RULE_DURATION = 10L; - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + } - @Test - public void testfindRulesDurationByRuleId() throws VitamClientException, JsonProcessingException, InvalidCreateOperationException { - // Prepare - final var fileRule = buildFileRuleModel(RuleMeasurementEnum.YEAR); + @Test + public void testfindRulesDurationByRuleId() + throws VitamClientException, JsonProcessingException, InvalidCreateOperationException { + // Prepare + final var fileRule = buildFileRuleModel(RuleMeasurementEnum.YEAR); final var requestResponseOk = new RequestResponseOK<FileRulesModel>().addResult(fileRule); - when(adminExternalClient.findRules(Mockito.any(VitamContext.class), Mockito.any(JsonNode.class))).thenReturn(requestResponseOk); + when(adminExternalClient.findRules(Mockito.any(VitamContext.class), Mockito.any(JsonNode.class))).thenReturn( + requestResponseOk); // Do - Optional<Long> ruleDuration = ruleService.findRulesDurationByRuleId(new VitamContext(TENANT_IDENTIFIER), RULE_ID); - // Verify + Optional<Long> ruleDuration = + ruleService.findRulesDurationByRuleId(new VitamContext(TENANT_IDENTIFIER), RULE_ID); + // Verify Assertions.assertTrue(ruleDuration.isPresent(), "The rule duration should be present"); Assertions.assertEquals(RULE_DURATION, ruleDuration.get(), "The rule duration value should match the duration"); - } + } - @Test - public void testfindRulesDurationByRuleId_with_rule_duration_in_months() - throws VitamClientException, JsonProcessingException, InvalidCreateOperationException { + @Test + public void testfindRulesDurationByRuleId_with_rule_duration_in_months() + throws VitamClientException, JsonProcessingException, InvalidCreateOperationException { // Prepare - final var fileRule = buildFileRuleModel(RuleMeasurementEnum.MONTH); + final var fileRule = buildFileRuleModel(RuleMeasurementEnum.MONTH); final var requestResponseOk = new RequestResponseOK<FileRulesModel>().addResult(fileRule); - when(adminExternalClient.findRules(Mockito.any(VitamContext.class), Mockito.any(JsonNode.class))).thenReturn(requestResponseOk); - // Do and Verify + when(adminExternalClient.findRules(Mockito.any(VitamContext.class), Mockito.any(JsonNode.class))).thenReturn( + requestResponseOk); + // Do and Verify var thrownException = Assertions.assertThrows(UnexpectedDataException.class, () -> { - ruleService.findRulesDurationByRuleId(new VitamContext(TENANT_IDENTIFIER), RULE_ID); + ruleService.findRulesDurationByRuleId(new VitamContext(TENANT_IDENTIFIER), RULE_ID); }); Assertions.assertEquals("The rule duration measurement should be in years.", thrownException.getMessage(), - "The exception message should match"); - } + "The exception message should match"); + } - @After - public void destroy() { - ruleService = null; - adminExternalClient = null; - } + @After + public void destroy() { + ruleService = null; + adminExternalClient = null; + } - private static FileRulesModel buildFileRuleModel(RuleMeasurementEnum ruleMeasurementEnum) { + private static FileRulesModel buildFileRuleModel(RuleMeasurementEnum ruleMeasurementEnum) { final var rule = new FileRulesModel(); rule.setRuleId(RULE_ID); rule.setRuleDuration(RULE_DURATION.toString()); - rule.setRuleMeasurement(fr.gouv.vitam.common.model.administration.RuleMeasurementEnum.getEnumFromType(ruleMeasurementEnum.getType())); + rule.setRuleMeasurement(ruleMeasurementEnum); return rule; - } + } } diff --git a/deployment/roles/vitamui/files/customer-init.yml b/deployment/roles/vitamui/files/customer-init.yml index 23c73dd19..6b3b6e145 100644 --- a/deployment/roles/vitamui/files/customer-init.yml +++ b/deployment/roles/vitamui/files/customer-init.yml @@ -201,7 +201,7 @@ customer-init: app-name: ACCESSION_REGISTER_APP level: roles: - - ROLE_GET_ACCESSION_REGISTER + - ROLE_GET_ACCESSION_REGISTER_DETAIL # Other Default profiles for admin group admin-profiles: #- name: profileName diff --git a/deployment/scripts/mongod/1.0.0/318_application_ref.js.j2 b/deployment/scripts/mongod/1.0.0/318_application_ref.js.j2 index 547202c05..2c51eb35d 100644 --- a/deployment/scripts/mongod/1.0.0/318_application_ref.js.j2 +++ b/deployment/scripts/mongod/1.0.0/318_application_ref.js.j2 @@ -7,9 +7,9 @@ print("START 318_application_ref.js"); db.applications.insert({ "identifier" : "ACCESSION_REGISTER_APP", {% if vitamui.referential.base_url is defined %} - "url": "{{ vitamui.referential.base_url }}/accessionregisterdetails", + "url": "{{ vitamui.referential.base_url }}/accession-register", {% else %} - "url": "{{ url_prefix }}/referential/accessionregisterdetails", + "url": "{{ url_prefix }}/referential/accession-register", {% endif %} "icon" : "vitamui-icon vitamui-icon-rules", "name" : "Registre des fonds", diff --git a/deployment/scripts/mongod/1.0.0/319_security_ref.js.j2 b/deployment/scripts/mongod/1.0.0/319_security_ref.js.j2 index de16c8462..292850553 100644 --- a/deployment/scripts/mongod/1.0.0/319_security_ref.js.j2 +++ b/deployment/scripts/mongod/1.0.0/319_security_ref.js.j2 @@ -8,7 +8,7 @@ db.contexts.updateOne( { $addToSet: { "roleNames": { $each: [ - "ROLE_GET_ACCESSION_REGISTER" + "ROLE_GET_ACCESSION_REGISTER_DETAIL" ] } } diff --git a/deployment/scripts/mongod/1.0.0/320_iam_ref.js.j2 b/deployment/scripts/mongod/1.0.0/320_iam_ref.js.j2 index 960d59d85..93019e624 100644 --- a/deployment/scripts/mongod/1.0.0/320_iam_ref.js.j2 +++ b/deployment/scripts/mongod/1.0.0/320_iam_ref.js.j2 @@ -19,7 +19,7 @@ db.profiles.insert({ "customerId" : "system_customer", "roles" : [ { - "name": "ROLE_GET_ACCESSION_REGISTER" + "name": "ROLE_GET_ACCESSION_REGISTER_DETAIL" } ] }); diff --git a/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.html b/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.html index 77cf4a85f..02ad6c195 100644 --- a/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.html +++ b/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.html @@ -1,14 +1,10 @@ -<div> - <span class="title-text" [ngStyle]="{'font-size': facetTitleSize + 'px'}">{{ facetTitle }}</span> - <div class="row row-data"> - <div class="col title-text" *ngFor="let facet of facetDetails"> - <div class="layout-data" [ngClass]="{ clickable: facet.clickable }" (click)="onFilter(facet)"> - <div class="mb-2"> - <span class="status-text" [ngStyle]="{ color: facet.color, 'font-size': facetSize + 'px' }">{{ facet.title }}</span> - </div> - <div class="result-text"> - <span [ngStyle]="{'font-size': facetResultSize + 'px'}">{{ facet.totalResults }}</span> - </div> +<span class="title-text">{{ facetTitle }}</span> +<div class="row row-data"> + <div class="col title-text" *ngFor="let facet of facetDetails"> + <div class="layout-data" [ngClass]="{ clickable: facet.clickable }" (click)="onFilter(facet)"> + <span class="status-text" [ngStyle]="{ color: facet.color }">{{ facet.title }}</span> + <div class="result-text"> + {{ facet.totalResults }} </div> </div> </div> diff --git a/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.scss b/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.scss index 7e9a3eb7f..742a8fc1a 100644 --- a/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.scss +++ b/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.scss @@ -2,16 +2,6 @@ cursor: pointer; } -.title-text { - font-family: Mulish; - font-style: normal; - font-weight: bold; - font-size: 14px; - line-height: 22px; - letter-spacing: 0.1px; - color: #9c31b5; -} - .row-data { margin-top: 10px; } diff --git a/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.ts b/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.ts index 7cdcf5ad2..dd45daf52 100644 --- a/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.ts +++ b/ui/ui-frontend-common/src/app/modules/components/logbook-operation-facet/logbook-operation-facet.component.ts @@ -63,24 +63,6 @@ export class LogbookOperationFacetComponent implements OnInit { @Input() facetDetails: FacetDetails[]; - /** - * Style font size for the facet title. Default to 14, unit is pixel - */ - @Input() - facetTitleSize: number = 16; - - /** - * Style font size for the facet name. Default to 14, unit is pixel - */ - @Input() - facetSize: number = 14; - - /** - * Style font size for the facet result. Default to 14, unit is pixel - */ - @Input() - facetResultSize: number = 20; - constructor() {} ngOnInit(): void {} diff --git a/ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/search-bar-with-sibling-button.component.scss b/ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/search-bar-with-sibling-button.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/search-bar-with-sibling-button.component.ts b/ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/search-bar-with-sibling-button.component.ts index 16fe43f55..7ab2691b6 100644 --- a/ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/search-bar-with-sibling-button.component.ts +++ b/ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/search-bar-with-sibling-button.component.ts @@ -39,7 +39,6 @@ import {Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewCh @Component({ selector: 'search-bar-with-sibling-button', templateUrl: './search-bar-with-sibling-button.component.html', - styleUrls: ['./search-bar-with-sibling-button.component.scss'] }) export class SearchBarWithSiblingButtonComponent { diff --git a/ui/ui-frontend-common/src/app/modules/models/access-register/accession-register-detail.ts b/ui/ui-frontend-common/src/app/modules/models/access-register/accession-register-detail.ts new file mode 100644 index 000000000..4be681ab5 --- /dev/null +++ b/ui/ui-frontend-common/src/app/modules/models/access-register/accession-register-detail.ts @@ -0,0 +1,29 @@ +import { AccessionRegisterStatus } from './accession-register-status'; +import { RegisterValueDetailModel } from './register-value-detail-model'; +import { RegisterValueEventModel } from './register-value-event-model'; +import {Id} from "../id.interface"; + +export interface AccessionRegisterDetail extends Id { + tenant: number; + version: number; + originatingAgency: string; + submissionAgency: string; + archivalAgreement: string; + archivalProfile?: string; + originatingAgencyLabel: string; + startDate: string; + endDate: string; + lastUpdate: string; + opi: string; + opc: string; + operationType: string; + acquisitionInformation: string; + events: RegisterValueEventModel[]; + status: AccessionRegisterStatus; + objectSize: RegisterValueDetailModel; + totalObjectsGroups: RegisterValueDetailModel; + totalObjects: RegisterValueDetailModel; + totalUnits: RegisterValueDetailModel; + operationsIds: string[]; + legalStatus?: string; +} diff --git a/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers-status.ts b/ui/ui-frontend-common/src/app/modules/models/access-register/accession-register-status.ts similarity index 100% rename from ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers-status.ts rename to ui/ui-frontend-common/src/app/modules/models/access-register/accession-register-status.ts diff --git a/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registe-summary.ts b/ui/ui-frontend-common/src/app/modules/models/access-register/accession-register-summary.ts similarity index 73% rename from ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registe-summary.ts rename to ui/ui-frontend-common/src/app/modules/models/access-register/accession-register-summary.ts index e9355a908..eed75ba49 100644 --- a/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registe-summary.ts +++ b/ui/ui-frontend-common/src/app/modules/models/access-register/accession-register-summary.ts @@ -1,5 +1,5 @@ -import {Id} from 'ui-frontend-common'; -import {AccessionRegisterDetail} from './accession-registers-detail'; +import { AccessionRegisterDetail } from './accession-register-detail'; +import {Id} from "../id.interface"; export interface AccessionRegisterSummary extends Id { tenant: number; diff --git a/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-register.ts b/ui/ui-frontend-common/src/app/modules/models/access-register/accession-register.ts similarity index 85% rename from ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-register.ts rename to ui/ui-frontend-common/src/app/modules/models/access-register/accession-register.ts index f2df9fce2..9d52b7f3b 100644 --- a/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-register.ts +++ b/ui/ui-frontend-common/src/app/modules/models/access-register/accession-register.ts @@ -1,4 +1,4 @@ -import {Id} from 'ui-frontend-common'; +import {Id} from "../id.interface"; export interface AccessionRegister extends Id { tenant: number; diff --git a/ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/index.ts b/ui/ui-frontend-common/src/app/modules/models/access-register/index.ts similarity index 87% rename from ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/index.ts rename to ui/ui-frontend-common/src/app/modules/models/access-register/index.ts index 29ad7fbf7..5a240d513 100644 --- a/ui/ui-frontend-common/src/app/modules/components/search-bar-with-sibling-button/index.ts +++ b/ui/ui-frontend-common/src/app/modules/models/access-register/index.ts @@ -34,4 +34,9 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -export * from './search-bar-with-sibling-button.component'; +export * from './accession-register'; +export * from './accession-register-detail'; +export * from './accession-register-status'; +export * from './accession-register-summary'; +export * from './register-value-detail-model'; +export * from './register-value-event-model'; diff --git a/ui/ui-frontend/projects/vitamui-library/src/lib/models/register-value-detail-model.ts b/ui/ui-frontend-common/src/app/modules/models/access-register/register-value-detail-model.ts similarity index 100% rename from ui/ui-frontend/projects/vitamui-library/src/lib/models/register-value-detail-model.ts rename to ui/ui-frontend-common/src/app/modules/models/access-register/register-value-detail-model.ts diff --git a/ui/ui-frontend-common/src/app/modules/models/access-register/register-value-event-model.ts b/ui/ui-frontend-common/src/app/modules/models/access-register/register-value-event-model.ts new file mode 100644 index 000000000..e531e63fb --- /dev/null +++ b/ui/ui-frontend-common/src/app/modules/models/access-register/register-value-event-model.ts @@ -0,0 +1,9 @@ +export interface RegisterValueEventModel { + operation: string; + operationType: string; + totalGots: number; + totalUnits: number; + totalObjects: number; + objectSize: number; + creationdate: string; +} diff --git a/ui/ui-frontend-common/src/app/modules/models/index.ts b/ui/ui-frontend-common/src/app/modules/models/index.ts index 05854db5a..a5ab1058f 100644 --- a/ui/ui-frontend-common/src/app/modules/models/index.ts +++ b/ui/ui-frontend-common/src/app/modules/models/index.ts @@ -52,3 +52,4 @@ export * from './tree-node.interface'; export * from './user/index'; export * from './vitam/index'; export * from './breadcrumb/breadcrumb.interface'; +export * from './access-register/index'; diff --git a/ui/ui-frontend-common/src/app/modules/pipes/bytes.pipe.spec.ts b/ui/ui-frontend-common/src/app/modules/pipes/bytes.pipe.spec.ts index d9d999683..12c3e6316 100644 --- a/ui/ui-frontend-common/src/app/modules/pipes/bytes.pipe.spec.ts +++ b/ui/ui-frontend-common/src/app/modules/pipes/bytes.pipe.spec.ts @@ -34,8 +34,8 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import { LoggerService } from '../logger/logger.service'; -import { BytesPipe } from './bytes.pipe'; +import {LoggerService} from '../logger/logger.service'; +import {BytesPipe} from './bytes.pipe'; describe('BytesPipe', () => { it('create an instance', () => { @@ -49,4 +49,14 @@ describe('BytesPipe', () => { expect(pipe.transform('57489487')).toBe('54.83 Mo'); expect(pipe.transform('45628658811')).toBe('42.50 Go'); }); + + it('should return unformatted same value when provide negative value', () => { + const pipe = new BytesPipe(new LoggerService()); + expect(pipe.transform('-70')).toBe('-70'); + }); + + it('should return 0 when provide 0 as value to format', () => { + const pipe = new BytesPipe(new LoggerService()); + expect(pipe.transform('0')).toBe('0 octet'); + }); }); diff --git a/ui/ui-frontend-common/src/app/modules/pipes/bytes.pipe.ts b/ui/ui-frontend-common/src/app/modules/pipes/bytes.pipe.ts index b7318ca9f..897a60d37 100644 --- a/ui/ui-frontend-common/src/app/modules/pipes/bytes.pipe.ts +++ b/ui/ui-frontend-common/src/app/modules/pipes/bytes.pipe.ts @@ -35,8 +35,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ import {Pipe, PipeTransform} from '@angular/core'; -import {Logger} from '../logger'; - +import {Logger} from '../logger/logger'; @Pipe({ name: 'bytes' }) export class BytesPipe implements PipeTransform { @@ -52,11 +51,23 @@ export class BytesPipe implements PipeTransform { return ''; } + if (parseFloat(value) < 0 ) { + this.logger.log(this, `BytesPipe: value [${value}] can't be negative`); + // return value there because next operation return Nan with negative value + return value; + } + + if (parseFloat(value) === 0) { + // return 0 there because next operation return -Infinity with "0" + return '0 octet'; + } + // TODO internationalization of units const units = ['octets', 'ko', 'Mo', 'Go', 'To', 'Po']; let power = Math.floor(Math.log(value) / Math.log(BytesPipe.NUMBER_OF_BYTES_IN_ONE_KB)); - if (power >= units.length) { - power = units.length - 1; + + while(power >= units.length) { + power = power - 1; } return (value / Math.pow(BytesPipe.NUMBER_OF_BYTES_IN_ONE_KB, power)).toFixed(precision) + ' ' + units[power]; diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.html b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.html index 5561cc9dd..97ada0d44 100644 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.html +++ b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.html @@ -2,7 +2,7 @@ <div class="row"> <div class="col-12 title-text mb-2"> <div class="result-layout"> - <div>{{ 'ACCESSION_REGISTER.LIST.NB_ENTRIES' | translate: {nb: dataSource?.length} }}</div> + <div>{{ 'ACCESSION_REGISTER.LIST.NB_ENTRIES' | translate: { nb: dataSource?.length } }}</div> </div> </div> </div> @@ -18,7 +18,9 @@ (orderChange)="emitOrderChange()" ></vitamui-common-order-by-button> </div> - <div class="col-3"><span>{{ 'ACCESSION_REGISTER.LIST.OPERATION_IDENTIFIER' | translate }}</span></div> + <div class="col-3"> + <span>{{ 'ACCESSION_REGISTER.LIST.OPERATION_IDENTIFIER' | translate }}</span> + </div> <div class="col-1"> <span>{{ 'ACCESSION_REGISTER.LIST.ORIGINATING_AGENCY' | translate }}</span> <vitamui-common-order-by-button @@ -46,35 +48,55 @@ (orderChange)="emitOrderChange()" ></vitamui-common-order-by-button> </div> - <div class="col-1"><span>{{ 'ACCESSION_REGISTER.LIST.TOTAL_UNITS' | translate }}</span></div> - <div class="col-1"><span>{{ 'ACCESSION_REGISTER.LIST.TOTAL_OBJECTS_GROUPS' | translate }}</span></div> - <div class="col-1"><span>{{ 'ACCESSION_REGISTER.LIST.TOTAL_OBJECTS' | translate }}</span></div> - <div class="col-1"><span>{{ 'ACCESSION_REGISTER.LIST.OBJECT_SIZE_INGESTED' | translate }}</span></div> + <div class="col-1"> + <span>{{ 'ACCESSION_REGISTER.LIST.TOTAL_UNITS' | translate }}</span> + </div> + <div class="col-1"> + <span>{{ 'ACCESSION_REGISTER.LIST.TOTAL_OBJECTS_GROUPS' | translate }}</span> + </div> + <div class="col-1"> + <span>{{ 'ACCESSION_REGISTER.LIST.TOTAL_OBJECTS' | translate }}</span> + </div> + <div class="col-1"> + <span>{{ 'ACCESSION_REGISTER.LIST.OBJECT_SIZE_INGESTED' | translate }}</span> + </div> <div class="col-1"> <span>{{ 'ACCESSION_REGISTER.LIST.STATUS' | translate }}</span> - <button class="vitamui-filter-button ml-1" [vitamuiCommonTableFilter]="statusFilterTemplate" - [class.active]="filterMap['Status'] && filterMap['Status'].length > 0" - #statusFilterTrigger="vitamuiCommonTableFilter"> + <button + class="vitamui-filter-button ml-1" + [vitamuiCommonTableFilter]="statusFilterTemplate" + [class.active]="filterMap['Status'] && filterMap['Status'].length > 0" + #statusFilterTrigger="vitamuiCommonTableFilter" + > <em class="material-icons vitamui-row-icon">filter_list</em> </button> <ng-template #statusFilterTemplate> <vitamui-common-table-filter-search - [(filter)]="filterMap['Status']" [options]="statusFilterOptions$|async" - (filterChange)="onFilterChange('Status', $event)" (filterClose)="statusFilterTrigger?.close()"> + [(filter)]="filterMap['Status']" + [options]="statusFilterOptions$ | async" + (filterChange)="onFilterChange('Status', $event)" + (filterClose)="statusFilterTrigger?.close()" + > </vitamui-common-table-filter-search> </ng-template> </div> </div> <div class="vitamui-table-body"> - <div class="vitamui-table-rows" *ngFor="let accessionRegisterDetail of dataSource" - (click)="accessionRegisterClick.emit(accessionRegisterDetail)"> + <div + class="vitamui-table-rows" + *ngFor="let accessionRegisterDetail of dataSource" + (click)="accessionRegisterClick.emit(accessionRegisterDetail)" + > <div class="vitamui-row d-flex align-items-center clickable"> - - <div class="col-1">{{ accessionRegisterDetail.startDate | date:'dd/MM/yyyy' }}</div> + <div class="col-1">{{ accessionRegisterDetail.startDate | date: 'dd/MM/yyyy' }}</div> <div class="col-3">{{ accessionRegisterDetail.opi }}</div> <div class="col-1"> - <p matTooltip="{{ accessionRegisterDetail.originatingAgencyLabel }}" matTooltipClass="vitamui-tooltip" [matTooltipShowDelay]="300"> + <p + matTooltip="{{ accessionRegisterDetail.originatingAgencyLabel }}" + matTooltipClass="vitamui-tooltip" + [matTooltipShowDelay]="300" + > {{ accessionRegisterDetail.originatingAgency | truncate: 12 }} </p> </div> @@ -89,8 +111,12 @@ <div class="col-1">{{ accessionRegisterDetail.totalObjects?.ingested }}</div> <div class="col-1">{{ accessionRegisterDetail.objectSize?.ingested | bytes }}</div> <div class="col-1"> - <p matTooltip="{{ accessionRegisterDetail.status | accessionStatus }}" matTooltipClass="vitamui-tooltip" [matTooltipShowDelay]="300"> - {{ accessionRegisterDetail.status | accessionStatus | truncate: 12 }} + <p + matTooltip="{{ 'ACCESSION_REGISTER.STATUS.' + accessionRegisterDetail.status | translate }}" + matTooltipClass="vitamui-tooltip" + [matTooltipShowDelay]="300" + > + {{ 'ACCESSION_REGISTER.STATUS.' + accessionRegisterDetail.status | translate | truncate: 12 }} </p> </div> </div> @@ -98,9 +124,9 @@ </div> </div> - <div *ngIf="!dataSource || pending then loadingSpinner"></div> - <div *ngIf="!pending && dataSource?.length === 0 then noResults"></div> - <div *ngIf="infiniteScrollDisabled && accessionRegistersService.canLoadMore && !pending then loadMore"></div> + <div *ngIf="!dataSource || pending; then loadingSpinner"></div> + <div *ngIf="!pending && dataSource?.length === 0; then noResults"></div> + <div *ngIf="infiniteScrollDisabled && accessionRegistersService.canLoadMore && !pending; then loadMore"></div> </div> <ng-template #noResults> diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.scss b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.scss index f4aa65fec..951427c50 100644 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.scss +++ b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.scss @@ -1,14 +1,3 @@ -.title-text { - font-family: Mulish; - font-style: normal; - font-weight: bold; - font-size: 14px; - line-height: 22px; - - letter-spacing: 0.1px; - - color: #9c31b5; -} .result-layout { display: flex; diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.ts b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.ts index 5a3be607e..5560bf097 100644 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.ts +++ b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-register-list.component.ts @@ -37,10 +37,8 @@ import { Component, EventEmitter, Inject, Input, LOCALE_ID, OnDestroy, OnInit, Output } from '@angular/core'; import { merge, Observable, Subject, Subscription } from 'rxjs'; import { debounceTime, startWith } from 'rxjs/operators'; -import { DEFAULT_PAGE_SIZE, Direction, InfiniteScrollTable, PageRequest } from 'ui-frontend-common'; -import { AccessionRegisterDetail } from '../../../../../vitamui-library/src/lib/models/accession-registers-detail'; +import { AccessionRegisterDetail, DEFAULT_PAGE_SIZE, Direction, InfiniteScrollTable, PageRequest } from 'ui-frontend-common'; import { AccessionRegistersService } from '../accession-register.service'; -import { AccessionRegisterBusiness } from '../accession-register.business'; @Component({ selector: 'app-accession-register-list', @@ -72,11 +70,7 @@ export class AccessionRegisterListComponent extends InfiniteScrollTable<Accessio searchSub: Subscription; - constructor( - public accessionRegistersService: AccessionRegistersService, - public accessionRegisterBusiness: AccessionRegisterBusiness, - @Inject(LOCALE_ID) private locale: string - ) { + constructor(public accessionRegistersService: AccessionRegistersService, @Inject(LOCALE_ID) private locale: string) { super(accessionRegistersService); } @@ -84,7 +78,7 @@ export class AccessionRegisterListComponent extends InfiniteScrollTable<Accessio this.searchSub = merge(this.searchChange, this.filterChange, this.orderChange) .pipe(startWith(null), debounceTime(this.filterDebounceTimeMs)) .subscribe(() => this.search()); - this.statusFilterOptions$ = this.accessionRegisterBusiness.getAccessionRegisterStatus(this.locale); + this.statusFilterOptions$ = this.accessionRegistersService.getAccessionRegisterStatus(this.locale); } ngOnDestroy() { diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-status.pipe.spec.ts b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-status.pipe.spec.ts deleted file mode 100644 index c136e998c..000000000 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-status.pipe.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {AccessionStatusPipe} from './accession-status.pipe'; -import {AccessionRegisterStatus} from "../../../../../vitamui-library/src/lib/models/accession-registers-status"; - -describe('AccessionStatusPipe', () => { - it('create an instance', () => { - const pipe = new AccessionStatusPipe(); - expect(pipe).toBeTruthy(); - }); - - it('should display human readable status', () => { - const pipe = new AccessionStatusPipe(); - expect(pipe.transform(AccessionRegisterStatus.STORED_AND_UPDATED)).toBe('Partiellement éliminée'); - expect(pipe.transform(AccessionRegisterStatus.STORED_AND_COMPLETED)).toBe('En stock et complète'); - expect(pipe.transform(AccessionRegisterStatus.UNSTORED)).toBe('Totalement éliminée'); - }); -}); diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-status.pipe.ts b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-status.pipe.ts deleted file mode 100644 index 0710ebe48..000000000 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-list/accession-status.pipe.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Pipe, PipeTransform } from '@angular/core'; -import {AccessionRegisterStatus} from "../../../../../vitamui-library/src/lib/models/accession-registers-status"; - -@Pipe({ - name: 'accessionStatus' -}) -export class AccessionStatusPipe implements PipeTransform { - - transform(value: AccessionRegisterStatus): string { - switch (value) { - case AccessionRegisterStatus.STORED_AND_UPDATED: - return 'Partiellement éliminée'; - case AccessionRegisterStatus.STORED_AND_COMPLETED: - return 'En stock et complète'; - case AccessionRegisterStatus.UNSTORED: - return 'Totalement éliminée'; - default: - return value; - } - } -} diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-routing.module.ts b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-routing.module.ts index 107cf253d..a87056ac9 100644 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-routing.module.ts +++ b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register-routing.module.ts @@ -34,11 +34,11 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {Route, RouterModule} from '@angular/router'; -import {ActiveTenantGuard, TenantSelectionGuard, VitamUITenantSelectComponent} from 'ui-frontend-common'; -import {AccessionRegisterComponent} from './accession-register.component'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { Route, RouterModule } from '@angular/router'; +import { ActiveTenantGuard, TenantSelectionGuard, VitamUITenantSelectComponent } from 'ui-frontend-common'; +import { AccessionRegisterComponent } from './accession-register.component'; const routes: Route[] = [ { diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.business.ts b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.business.ts deleted file mode 100644 index 8b6903827..000000000 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.business.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright French Prime minister Office/SGMAP/DINSIC/Vitam Program (2019-2020) - * and the signatories of the "VITAM - Accord du Contributeur" agreement. - * - * contact@programmevitam.fr - * - * This software is a computer program whose purpose is to implement - * implement a digital archiving front-office system for the secure and - * efficient high volumetry VITAM solution. - * - * This software is governed by the CeCILL-C license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-C - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -import {Injectable} from '@angular/core'; -import {BehaviorSubject} from 'rxjs'; -import {AccessionRegisterStatus} from "../../../../vitamui-library/src/lib/models/accession-registers-status"; - -@Injectable() -export class AccessionRegisterBusiness { - private accessionRegisterStatus: BehaviorSubject<any[]> = new BehaviorSubject<any>([]); - - getAccessionRegisterStatus(locale: string) { - const data = [ - { value: AccessionRegisterStatus.STORED_AND_COMPLETED, label: 'En stock et complète' }, - { value: AccessionRegisterStatus.STORED_AND_UPDATED, label: 'Partiellement éliminée' }, - { value: AccessionRegisterStatus.UNSTORED, label: 'Totalement éliminée' }, - ]; - this.accessionRegisterStatus.next(data.sort(this.sortByLabel(locale))); - return this.accessionRegisterStatus.asObservable(); - } - - private sortByLabel(locale: string): (a: { label: string }, b: { label: string }) => number { - return (a: { label: string }, b: { label: string }) => a.label.localeCompare(b.label, locale); - } - -} diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.html b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.html index d7ef337a6..63f81766e 100644 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.html +++ b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.html @@ -1,6 +1,5 @@ <mat-sidenav-container [autosize]="true" [hasBackdrop]="false"> - <mat-sidenav #panel mode="side" position="end" [fixedInViewport]="true"> - </mat-sidenav> + <mat-sidenav #panel mode="side" position="end" [fixedInViewport]="true"> </mat-sidenav> <mat-sidenav-content> <div class="vitamui-heading"> @@ -14,10 +13,7 @@ </div> <div class="vitamui-content"> <div class="mt-3"> - <app-accession-register-list - [search]="search" - (accessionRegisterClick)="openPanel($event)"> - </app-accession-register-list> + <app-accession-register-list [search]="search" (accessionRegisterClick)="openPanel($event)"> </app-accession-register-list> </div> </div> </mat-sidenav-content> diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.scss b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.spec.ts b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.spec.ts deleted file mode 100644 index b6161d00c..000000000 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.spec.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright French Prime minister Office/SGMAP/DINSIC/Vitam Program (2019-2020) - * and the signatories of the "VITAM - Accord du Contributeur" agreement. - * - * contact@programmevitam.fr - * - * This software is a computer program whose purpose is to implement - * implement a digital archiving front-office system for the secure and - * efficient high volumetry VITAM solution. - * - * This software is governed by the CeCILL-C license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-C - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AccessionRegisterComponent } from './accession-register.component'; -import { VitamUICommonTestModule } from 'ui-frontend-common/testing'; -import { RouterTestingModule } from '@angular/router/testing'; -import { BASE_URL, ENVIRONMENT, InjectorModule, LoggerModule, RoleToggleModule, TableFilterModule } from 'ui-frontend-common'; -import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatDialogModule } from '@angular/material/dialog'; -import { MatMenuModule } from '@angular/material/menu'; -import { AccessionRegisterBusiness } from './accession-register.business'; -import { of } from 'rxjs'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { SharedModule } from '../shared/shared.module'; -import { VitamUILibraryModule } from '../../../../vitamui-library/src/lib/vitamui-library.module'; -import { AccessionRegisterRoutingModule } from './accession-register-routing.module'; -import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatSelectModule } from '@angular/material/select'; -import { ReactiveFormsModule } from '@angular/forms'; -import { GroupAttributionModule } from '../../../../identity/src/app/user/group-attribution/group-attribution.module'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatTabsModule } from '@angular/material/tabs'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatCardModule } from '@angular/material/card'; -import { MatPseudoCheckboxModule } from '@angular/material/core'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { environment } from '../../../../archive-search/src/environments/environment.prod'; -import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import {TranslateModule} from "@ngx-translate/core"; - -describe('AccessionRegisterComponent', () => { - let component: AccessionRegisterComponent; - let fixture: ComponentFixture<AccessionRegisterComponent>; - - const accessionRegisterBusinessMock = { - getAccessionRegisterStatus: () => of([]), - setOpenAdvancedSearchPanel: () => {}, - toggleOpenAdvancedSearchPanel: () => {}, - isOpenAdvancedSearchPanel: () => of(true), - }; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - VitamUICommonTestModule, - RouterTestingModule, - InjectorModule, - LoggerModule.forRoot(), - NoopAnimationsModule, - ReactiveFormsModule, - MatMenuModule, - MatSnackBarModule, - MatDialogModule, - MatSidenavModule, - MatProgressSpinnerModule, - SharedModule, - TableFilterModule, - VitamUILibraryModule, - AccessionRegisterRoutingModule, - MatButtonToggleModule, - MatSelectModule, - GroupAttributionModule, - MatProgressBarModule, - MatTabsModule, - RoleToggleModule, - MatCheckboxModule, - MatCardModule, - MatPseudoCheckboxModule, - MatDatepickerModule, - TranslateModule.forRoot() - ], - declarations: [AccessionRegisterComponent], - providers: [ - { provide: AccessionRegisterBusiness, useValue: accessionRegisterBusinessMock }, - { provide: BASE_URL, useValue: '/fake-api' }, - { provide: ENVIRONMENT, useValue: environment }, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(AccessionRegisterComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.ts b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.ts index d67334ae3..d35200047 100644 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.ts +++ b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.component.ts @@ -34,25 +34,20 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import {Component} from '@angular/core'; -import {AccessionRegisterSummary} from '../../../../vitamui-library/src/lib/models/accession-registe-summary'; -import {AccessionRegistersService} from './accession-register.service'; -import {SidenavPage} from 'ui-frontend-common'; -import {AccessionRegisterDetail} from '../../../../vitamui-library/src/lib/models/accession-registers-detail'; -import {ActivatedRoute} from '@angular/router'; +import { Component } from '@angular/core'; +import { AccessionRegisterSummary, AccessionRegisterDetail, SidenavPage } from 'ui-frontend-common'; +import { AccessionRegistersService } from './accession-register.service'; +import { ActivatedRoute } from '@angular/router'; @Component({ selector: 'app-accession-register', templateUrl: './accession-register.component.html', - styleUrls: ['./accession-register.component.scss'], }) export class AccessionRegisterComponent extends SidenavPage<AccessionRegisterDetail> { accessionRegisterSummary: AccessionRegisterSummary[] = []; public search: string; - constructor( - accessionRegisterService: AccessionRegistersService, - route: ActivatedRoute) { + constructor(accessionRegisterService: AccessionRegistersService, route: ActivatedRoute) { super(route, accessionRegisterService); } diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.module.ts b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.module.ts index 6d40140e8..1dd8fbfd7 100644 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.module.ts +++ b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.module.ts @@ -34,32 +34,30 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import {CommonModule} from '@angular/common'; -import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core'; -import {ReactiveFormsModule} from '@angular/forms'; -import {MatButtonToggleModule} from '@angular/material/button-toggle'; -import {MatCardModule} from '@angular/material/card'; -import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatPseudoCheckboxModule} from '@angular/material/core'; -import {MatDialogModule} from '@angular/material/dialog'; -import {MatMenuModule} from '@angular/material/menu'; -import {MatProgressBarModule} from '@angular/material/progress-bar'; -import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; -import {MatSelectModule} from '@angular/material/select'; -import {MatSidenavModule} from '@angular/material/sidenav'; -import {MatSnackBarModule} from '@angular/material/snack-bar'; -import {MatTabsModule} from '@angular/material/tabs'; -import {RouterModule} from '@angular/router'; -import {VitamUILibraryModule} from 'projects/vitamui-library/src/public-api'; -import {RoleToggleModule, TableFilterModule, VitamUICommonModule} from 'ui-frontend-common'; -import {GroupAttributionModule} from '../../../../identity/src/app/user/group-attribution/group-attribution.module'; -import {SharedModule} from '../shared/shared.module'; -import {AccessionRegisterListComponent} from './accession-register-list/accession-register-list.component'; -import {AccessionRegisterRoutingModule} from './accession-register-routing.module'; -import {AccessionRegisterComponent} from './accession-register.component'; -import {MatDatepickerModule} from '@angular/material/datepicker'; -import {AccessionRegisterBusiness} from './accession-register.business'; -import { AccessionStatusPipe } from './accession-register-list/accession-status.pipe'; +import { CommonModule } from '@angular/common'; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatButtonToggleModule } from '@angular/material/button-toggle'; +import { MatCardModule } from '@angular/material/card'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatPseudoCheckboxModule } from '@angular/material/core'; +import { MatDialogModule } from '@angular/material/dialog'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatSelectModule } from '@angular/material/select'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { MatTabsModule } from '@angular/material/tabs'; +import { RouterModule } from '@angular/router'; +import { VitamUILibraryModule } from 'projects/vitamui-library/src/public-api'; +import { RoleToggleModule, TableFilterModule, VitamUICommonModule } from 'ui-frontend-common'; +import { GroupAttributionModule } from '../../../../identity/src/app/user/group-attribution/group-attribution.module'; +import { SharedModule } from '../shared/shared.module'; +import { AccessionRegisterListComponent } from './accession-register-list/accession-register-list.component'; +import { AccessionRegisterRoutingModule } from './accession-register-routing.module'; +import { AccessionRegisterComponent } from './accession-register.component'; +import { MatDatepickerModule } from '@angular/material/datepicker'; @NgModule({ imports: [ @@ -85,14 +83,9 @@ import { AccessionStatusPipe } from './accession-register-list/accession-status. MatCheckboxModule, MatCardModule, MatPseudoCheckboxModule, - MatDatepickerModule - ], - declarations: [ - AccessionRegisterComponent, - AccessionRegisterListComponent, - AccessionStatusPipe, + MatDatepickerModule, ], + declarations: [AccessionRegisterComponent, AccessionRegisterListComponent], schemas: [CUSTOM_ELEMENTS_SCHEMA], - providers: [AccessionRegisterBusiness], }) export class AccessionRegisterModule {} diff --git a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.service.ts b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.service.ts index 967321e8a..7c8d7cbe4 100644 --- a/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.service.ts +++ b/ui/ui-frontend/projects/referential/src/app/accession-register/accession-register.service.ts @@ -34,24 +34,54 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import {HttpClient} from '@angular/common/http'; -import {Injectable} from '@angular/core'; -import {Subject} from 'rxjs'; -import {SearchService} from 'ui-frontend-common'; -import {AccessionRegisterDetail} from '../../../../vitamui-library/src/lib/models/accession-registers-detail'; -import {AccessionRegisterDetailsApiService} from '../core/api/accession-register-details-api.service'; +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { of, Subject } from 'rxjs'; +import { AccessionRegisterDetail, AccessionRegisterStatus, SearchService } from 'ui-frontend-common'; +import { AccessionRegisterDetailApiService } from '../core/api/accession-register-detail-api.service'; +import { catchError, map, withLatestFrom } from 'rxjs/operators'; +import { TranslateService } from '@ngx-translate/core'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class AccessionRegistersService extends SearchService<AccessionRegisterDetail> { - pageEvent = new Subject<string>(); tenantEvent = new Subject<string>(); customerEvent = new Subject<string>(); - updated=new Subject<AccessionRegisterDetail>(); + updated = new Subject<AccessionRegisterDetail>(); + + constructor( + accessionRegisterApiService: AccessionRegisterDetailApiService, + http: HttpClient, + private translateService: TranslateService + ) { + super(http, accessionRegisterApiService, 'ALL'); + } + + getAccessionRegisterStatus(locale: string) { + const prefix = 'ACCESSION_REGISTER.STATUS.'; + return this.translateService.get(prefix + AccessionRegisterStatus.STORED_AND_COMPLETED).pipe( + withLatestFrom( + this.translateService.get(prefix + AccessionRegisterStatus.STORED_AND_UPDATED), + this.translateService.get(prefix + AccessionRegisterStatus.UNSTORED) + ), + map(([storedAndCompleted, storedAndUpdated, unstored]) => { + const data = [ + { value: AccessionRegisterStatus.STORED_AND_COMPLETED, label: storedAndCompleted }, + { value: AccessionRegisterStatus.STORED_AND_UPDATED, label: storedAndUpdated }, + { value: AccessionRegisterStatus.UNSTORED, label: unstored }, + ]; + return data.sort(this.sortByLabel(locale)); + }), + catchError((error) => { + console.error(error); + return of(error); + }) + ); + } - constructor(accessionRegistersApiService: AccessionRegisterDetailsApiService, http: HttpClient) { - super(http,accessionRegistersApiService,'ALL'); + private sortByLabel(locale: string): (a: { label: string }, b: { label: string }) => number { + return (a: { label: string }, b: { label: string }) => a.label.localeCompare(b.label, locale); } } diff --git a/ui/ui-frontend/projects/referential/src/app/app-routing.module.ts b/ui/ui-frontend/projects/referential/src/app/app-routing.module.ts index 3cd60fb8c..4af8219c3 100644 --- a/ui/ui-frontend/projects/referential/src/app/app-routing.module.ts +++ b/ui/ui-frontend/projects/referential/src/app/app-routing.module.ts @@ -40,20 +40,20 @@ import { QuicklinkStrategy } from 'ngx-quicklink'; import { AccountComponent, ActiveTenantGuard, AnalyticsResolver, AppGuard, AuthGuard } from 'ui-frontend-common'; import { AppComponent } from './app.component'; -const routes: Routes=[ +const routes: Routes = [ { // we use PORTAL_APP as our appId so that the AppGuard won't find a profile with this appId // and we'll be redirected to the Portal Application path: '', component: AppComponent, - canActivate: [AuthGuard,AppGuard], - data: {appId: 'PORTAL_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'PORTAL_APP' }, }, { path: 'account', component: AccountComponent, - canActivate: [AuthGuard,AppGuard], - data: {appId: 'ACCOUNTS_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'ACCOUNTS_APP' }, }, // ===================================================== // ACCESS CONTRACT @@ -61,8 +61,8 @@ const routes: Routes=[ { path: 'access-contract', loadChildren: () => import('./access-contract/access-contract.module').then((m) => m.AccessContractModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'ACCESS_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'ACCESS_APP' }, }, // ===================================================== // INGEST CONTRACT @@ -70,8 +70,8 @@ const routes: Routes=[ { path: 'ingest-contract', loadChildren: () => import('./ingest-contract/ingest-contract.module').then((m) => m.IngestContractModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'INGEST_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'INGEST_APP' }, }, // ===================================================== // AGENCY @@ -79,8 +79,8 @@ const routes: Routes=[ { path: 'agency', loadChildren: () => import('./agency/agency.module').then((m) => m.AgencyModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'AGENCIES_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'AGENCIES_APP' }, }, // ===================================================== // FILE FORMAT @@ -88,8 +88,8 @@ const routes: Routes=[ { path: 'file-format', loadChildren: () => import('./file-format/file-format.module').then((m) => m.FileFormatModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'FILE_FORMATS_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'FILE_FORMATS_APP' }, }, // ===================================================== // CONTEXTS @@ -97,8 +97,8 @@ const routes: Routes=[ { path: 'context', loadChildren: () => import('./context/context.module').then((m) => m.ContextModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'CONTEXTS_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'CONTEXTS_APP' }, }, // ===================================================== // SECURITY PROFILES @@ -106,8 +106,8 @@ const routes: Routes=[ { path: 'security-profile', loadChildren: () => import('./security-profile/security-profile.module').then((m) => m.SecurityProfileModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'SECURITY_PROFILES_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'SECURITY_PROFILES_APP' }, }, // ===================================================== // ONTOLOGY @@ -115,8 +115,8 @@ const routes: Routes=[ { path: 'ontology', loadChildren: () => import('./ontology/ontology.module').then((m) => m.OntologyModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'ONTOLOGY_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'ONTOLOGY_APP' }, }, // ===================================================== // AUDITS @@ -124,8 +124,8 @@ const routes: Routes=[ { path: 'audit', loadChildren: () => import('./audit/audit.module').then((m) => m.AuditModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'AUDIT_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'AUDIT_APP' }, }, // ===================================================== // SECURISATION @@ -133,8 +133,8 @@ const routes: Routes=[ { path: 'securisation', loadChildren: () => import('./securisation/securisation.module').then((m) => m.SecurisationModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'SECURE_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'SECURE_APP' }, }, // ===================================================== // PROBATIVE VALUE @@ -142,8 +142,8 @@ const routes: Routes=[ { path: 'probative-value', loadChildren: () => import('./probative-value/probative-value.module').then((m) => m.ProbativeValueModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'PROBATIVE_VALUE_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'PROBATIVE_VALUE_APP' }, }, // ===================================================== // LOGBOOK OPERATION API @@ -151,8 +151,8 @@ const routes: Routes=[ { path: 'logbook-operation', loadChildren: () => import('./logbook-operation/logbook-operation.module').then((m) => m.LogbookOperationModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'LOGBOOK_OPERATION_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'LOGBOOK_OPERATION_APP' }, }, // ===================================================== // DSL @@ -160,8 +160,8 @@ const routes: Routes=[ { path: 'dsl', loadChildren: () => import('./admin-dsl/admin-dsl.module').then((m) => m.AdminDslModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'DSL_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'DSL_APP' }, }, // ===================================================== // RULES @@ -169,8 +169,8 @@ const routes: Routes=[ { path: 'rule', loadChildren: () => import('./rule/rule.module').then((m) => m.RuleModule), - canActivate: [AuthGuard,AppGuard], - data: {appId: 'RULES_APP'}, + canActivate: [AuthGuard, AppGuard], + data: { appId: 'RULES_APP' }, }, // ===================================================== // LOGBOOK MANAGEMENT OPERATION @@ -181,27 +181,24 @@ const routes: Routes=[ import('./logbook-management-operation/logbook-management-operation.module').then( (module) => module.LogbookManagementOperationModule ), - canActivate: [AuthGuard,AppGuard], - resolve: {userAnalytics: AnalyticsResolver}, - data: {appId: 'LOGBOOK_MANAGEMENT_OPERATION_APP'}, + canActivate: [AuthGuard, AppGuard], + resolve: { userAnalytics: AnalyticsResolver }, + data: { appId: 'LOGBOOK_MANAGEMENT_OPERATION_APP' }, }, // ===================================================== // ACCESSION REGISTER // ===================================================== { - path: 'accessionregisterdetails', - loadChildren: () => - import('./accession-register/accession-register.module').then( - m => m.AccessionRegisterModule - ), - canActivate: [AuthGuard,AppGuard], - resolve: {userAnalytics: AnalyticsResolver}, - data: {appId: 'ACCESSION_REGISTER_APP'} + path: 'accession-register', + loadChildren: () => import('./accession-register/accession-register.module').then((m) => m.AccessionRegisterModule), + canActivate: [AuthGuard, AppGuard], + resolve: { userAnalytics: AnalyticsResolver }, + data: { appId: 'ACCESSION_REGISTER_APP' }, }, // ===================================================== // unknown path // ===================================================== - {path: '**',redirectTo: ''}, + { path: '**', redirectTo: '' }, ]; @NgModule({ @@ -211,6 +208,6 @@ const routes: Routes=[ }), ], exports: [RouterModule], - providers: [ActiveTenantGuard,AuthGuard], + providers: [ActiveTenantGuard, AuthGuard], }) export class AppRoutingModule {} diff --git a/ui/ui-frontend/projects/referential/src/app/audit/audit-create/audit-create.component.html b/ui/ui-frontend/projects/referential/src/app/audit/audit-create/audit-create.component.html index 9af3b274c..475b3beef 100644 --- a/ui/ui-frontend/projects/referential/src/app/audit/audit-create/audit-create.component.html +++ b/ui/ui-frontend/projects/referential/src/app/audit/audit-create/audit-create.component.html @@ -42,7 +42,7 @@ </div> </div> - <div class="form-group" + <div class="form-group" *ngIf="form.value.auditActions !== 'AUDIT_FILE_CONSISTENCY' && form.value.auditActions !== 'AUDIT_FILE_RECTIFICATION'"> <div class="row"> <div class="col-8 form-control"> @@ -51,13 +51,13 @@ </div> <div class="col-8 form-control"> - <mat-form-field class="vitamui-mat-select" - *ngIf="allServices.value === false && accessionRegisters && ( - form.value.auditActions === 'AUDIT_FILE_EXISTING' || + <mat-form-field class="vitamui-mat-select" + *ngIf="allServices.value === false && accessionRegisterSummaries && ( + form.value.auditActions === 'AUDIT_FILE_EXISTING' || form.value.auditActions === 'AUDIT_FILE_INTEGRITY')"> <mat-select formControlName="objectId" placeholder="Selectionnez le service producteur" panelclass="vitamui-mat-select" required> - <mat-option *ngFor='let accession of accessionRegisters' [value]="accession.originatingAgency"> + <mat-option *ngFor='let accession of accessionRegisterSummaries' [value]="accession.originatingAgency"> {{accession.originatingAgency}} </mat-option> </mat-select> @@ -78,7 +78,7 @@ </div> </div> </div> - <div class="btn-container"> + <div class="btn-container"> <button type="button" class="btn primary" cdkStepperNext *ngIf="!this.allNodes.value" [disabled]="!isStepValid()">{{'COMMON.NEXT' | translate}}</button> <button type="submit" class="btn primary" *ngIf="this.allNodes.value" [disabled]="!isStepValid()">{{'COMMON.SUBMIT' | translate}}</button> @@ -109,4 +109,4 @@ </div> </cdk-step> </vitamui-common-stepper> -</form> \ No newline at end of file +</form> diff --git a/ui/ui-frontend/projects/referential/src/app/audit/audit-create/audit-create.component.ts b/ui/ui-frontend/projects/referential/src/app/audit/audit-create/audit-create.component.ts index 6354330a9..23815efe0 100644 --- a/ui/ui-frontend/projects/referential/src/app/audit/audit-create/audit-create.component.ts +++ b/ui/ui-frontend/projects/referential/src/app/audit/audit-create/audit-create.component.ts @@ -34,27 +34,32 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import {HttpHeaders} from '@angular/common/http'; -import {Component, Inject, Input, OnInit} from '@angular/core'; -import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {AccessionRegister, FilingPlanMode} from 'projects/vitamui-library/src/public-api'; -import {Subscription} from 'rxjs'; -import {ConfirmDialogService, StartupService, ExternalParametersService, ExternalParameters} from 'ui-frontend-common'; - -import {AccessContractService} from '../../access-contract/access-contract.service'; -import {AuditService} from '../audit.service'; -import {AuditCreateValidators} from './audit-create-validator'; -import {MatSnackBar} from '@angular/material/snack-bar'; +import { HttpHeaders } from '@angular/common/http'; +import { Component, Inject, Input, OnInit } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { FilingPlanMode } from 'projects/vitamui-library/src/public-api'; +import { Subscription } from 'rxjs'; +import { + AccessionRegisterSummary, + ConfirmDialogService, + StartupService, + ExternalParametersService, + ExternalParameters, +} from 'ui-frontend-common'; + +import { AccessContractService } from '../../access-contract/access-contract.service'; +import { AuditService } from '../audit.service'; +import { AuditCreateValidators } from './audit-create-validator'; +import { MatSnackBar } from '@angular/material/snack-bar'; import '@angular/localize/init'; const PROGRESS_BAR_MULTIPLICATOR = 100; - @Component({ selector: 'app-audit-create', templateUrl: './audit-create.component.html', - styleUrls: ['./audit-create.component.scss'] + styleUrls: ['./audit-create.component.scss'], }) export class AuditCreateComponent implements OnInit { @Input() tenantIdentifier: number; @@ -69,7 +74,7 @@ export class AuditCreateComponent implements OnInit { selectedNodes = new FormControl(); accessContractId: string = null; - accessionRegisters: AccessionRegister[]; + accessionRegisterSummaries: AccessionRegisterSummary[]; // stepCount is the total number of steps and is used to calculate the advancement of the progress bar. // We could get the number of steps using ViewChildren(StepComponent) but this triggers a @@ -89,25 +94,26 @@ export class AuditCreateComponent implements OnInit { private auditCreateValidator: AuditCreateValidators, private externalParameterService: ExternalParametersService, private snackBar: MatSnackBar - ) { - } + ) {} ngOnInit() { - this.externalParameterService.getUserExternalParameters().subscribe(parameters => { + this.externalParameterService.getUserExternalParameters().subscribe((parameters) => { const accessConctractId: string = parameters.get(ExternalParameters.PARAM_ACCESS_CONTRACT); if (accessConctractId && accessConctractId.length > 0) { this.accessContractId = accessConctractId; - this.auditService.getAllAccessionRegister(this.accessContractId).subscribe(accessionRegisters => { - this.accessionRegisters = accessionRegisters; + this.auditService.getAllAccessionRegister(this.accessContractId).subscribe((accessionRegisters) => { + this.accessionRegisterSummaries = accessionRegisters; }); } else { this.snackBar.open( $localize`:access contrat not set message@@accessContratNotSetErrorMessage:Aucun contrat d'accès n'est associé à l'utiisateur`, - null, { + null, + { panelClass: 'vitamui-snack-bar', - duration: 10000 - }); + duration: 10000, + } + ); } }); @@ -116,10 +122,10 @@ export class AuditCreateComponent implements OnInit { auditType: ['tenant', Validators.required], evidenceAudit: [null, null, this.auditCreateValidator.checkEvidenceAuditId()], objectId: [this.startupService.getTenantIdentifier(), Validators.required], - query: [this.getRootQuery(null)] + query: [this.getRootQuery(null)], }); - this.form.controls.auditActions.valueChanges.subscribe(auditActions => { + this.form.controls.auditActions.valueChanges.subscribe((auditActions) => { // Update the validators if (auditActions === 'AUDIT_FILE_RECTIFICATION') { this.allServices.setValue(false); @@ -143,15 +149,15 @@ export class AuditCreateComponent implements OnInit { this.allServices.valueChanges.subscribe((value) => { if (this.form.controls.auditActions.value !== 'AUDIT_FILE_RECTIFICATION') { - this.form.controls.auditType.setValue((value) ? 'tenant' : 'originatingagency'); + this.form.controls.auditType.setValue(value ? 'tenant' : 'originatingagency'); } - this.form.controls.objectId.setValue((value) ? this.startupService.getTenantIdentifier() : null); + this.form.controls.objectId.setValue(value ? this.startupService.getTenantIdentifier() : null); this.updateObjectIdValidators(); this.form.updateValueAndValidity(); }); - this.selectedNodes.valueChanges.subscribe(value => { + this.selectedNodes.valueChanges.subscribe((value) => { if (value && value.included && value.included.length > 0) { this.form.controls.query.setValue(this.getRootQuery(value.included)); } else { @@ -159,21 +165,22 @@ export class AuditCreateComponent implements OnInit { } }); - this.form.controls.evidenceAudit.valueChanges.subscribe(value => { + this.form.controls.evidenceAudit.valueChanges.subscribe((value) => { this.form.controls.auditType.setValue(value); }); - this.allNodes.valueChanges.subscribe((value) => this.stepCount = (value) ? 1 : 2); + this.allNodes.valueChanges.subscribe((value) => (this.stepCount = value ? 1 : 2)); } /** * Add or remove the required validator on the filed 'objectId' */ private updateObjectIdValidators() { - if (this.allServices.value && this.accessionRegisters && ( - this.form.value.auditActions === 'AUDIT_FILE_EXISTING' || - this.form.value.auditActions === 'AUDIT_FILE_INTEGRITY' - )) { + if ( + this.allServices.value && + this.accessionRegisterSummaries && + (this.form.value.auditActions === 'AUDIT_FILE_EXISTING' || this.form.value.auditActions === 'AUDIT_FILE_INTEGRITY') + ) { this.form.get('objectId').setValidators(Validators.required); } else { this.form.get('objectId').clearValidators(); @@ -181,22 +188,25 @@ export class AuditCreateComponent implements OnInit { } isStepValid(): boolean { - const isEvidenceAuditValid = this.form.value.auditActions === 'AUDIT_FILE_CONSISTENCY' && - this.accessContractId != null; - const isRectificationAuditValid = this.form.value.auditActions === 'AUDIT_FILE_RECTIFICATION' && + const isEvidenceAuditValid = this.form.value.auditActions === 'AUDIT_FILE_CONSISTENCY' && this.accessContractId != null; + const isRectificationAuditValid = + this.form.value.auditActions === 'AUDIT_FILE_RECTIFICATION' && this.accessContractId != null && - !this.form.get('evidenceAudit').invalid && !this.form.get('evidenceAudit').pending; - const isOtherAuditValid = (this.form.value.auditActions === 'AUDIT_FILE_INTEGRITY' || - this.form.value.auditActions === 'AUDIT_FILE_EXISTING') && + !this.form.get('evidenceAudit').invalid && + !this.form.get('evidenceAudit').pending; + const isOtherAuditValid = + (this.form.value.auditActions === 'AUDIT_FILE_INTEGRITY' || this.form.value.auditActions === 'AUDIT_FILE_EXISTING') && this.accessContractId != null && - !this.form.get('auditType').invalid && !this.form.get('auditType').pending && - !this.form.get('objectId').invalid && !this.form.get('objectId').pending; + !this.form.get('auditType').invalid && + !this.form.get('auditType').pending && + !this.form.get('objectId').invalid && + !this.form.get('objectId').pending; return isEvidenceAuditValid || isRectificationAuditValid || isOtherAuditValid; } ngOnDestroy = () => { this.keyPressSubscription.unsubscribe(); - } + }; onCancel() { if (this.form.dirty) { @@ -211,17 +221,15 @@ export class AuditCreateComponent implements OnInit { return; } - this.auditService.create( - this.form.value, - new HttpHeaders({'X-Access-Contract-Id': this.accessContractId})) - .subscribe( + this.auditService.create(this.form.value, new HttpHeaders({ 'X-Access-Contract-Id': this.accessContractId })).subscribe( () => { - this.dialogRef.close({success: true, action: 'none'}); + this.dialogRef.close({ success: true, action: 'none' }); }, (error: any) => { - this.dialogRef.close({success: false, action: 'none'}); + this.dialogRef.close({ success: false, action: 'none' }); console.error(error); - }); + } + ); } get stepProgress() { @@ -231,21 +239,24 @@ export class AuditCreateComponent implements OnInit { getRootQuery(includedRoots: string[]) { if (includedRoots === null) { return { - $query: [{ - $or: [{$exists: '#id'}] - }], + $query: [ + { + $or: [{ $exists: '#id' }], + }, + ], $filter: {}, - $projection: {} + $projection: {}, }; } return { - $query: [{ - $or: [{$in: {'#allunitups': includedRoots}}] - }], + $query: [ + { + $or: [{ $in: { '#allunitups': includedRoots } }], + }, + ], $filter: {}, - $projection: {} + $projection: {}, }; } - } diff --git a/ui/ui-frontend/projects/referential/src/app/audit/audit.service.ts b/ui/ui-frontend/projects/referential/src/app/audit/audit.service.ts index ff6a4791d..b39524ed2 100644 --- a/ui/ui-frontend/projects/referential/src/app/audit/audit.service.ts +++ b/ui/ui-frontend/projects/referential/src/app/audit/audit.service.ts @@ -34,65 +34,63 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import {HttpClient, HttpHeaders, HttpParams, HttpResponse} from '@angular/common/http'; -import {Injectable} from '@angular/core'; -import {AccessionRegister, Event} from 'projects/vitamui-library/src/public-api'; -import {Observable} from 'rxjs'; -import {map, tap} from 'rxjs/operators'; -import {DEFAULT_PAGE_SIZE, Direction, PageRequest, SearchService, LogbookApiService} from 'ui-frontend-common'; +import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Event } from 'projects/vitamui-library/src/public-api'; +import { Observable } from 'rxjs'; +import { map, tap } from 'rxjs/operators'; +import { AccessionRegisterSummary, DEFAULT_PAGE_SIZE, Direction, PageRequest, SearchService, LogbookApiService } from 'ui-frontend-common'; -import {AccessionRegisterApiService} from '../core/api/accession-register-api.service'; -import {OperationApiService} from '../core/api/operation-api.service'; -import {VitamUISnackBar, VitamUISnackBarComponent} from '../shared/vitamui-snack-bar'; +import { AccessionRegisterSummaryApiService } from '../core/api/accession-register-summary-api.service'; +import { OperationApiService } from '../core/api/operation-api.service'; +import { VitamUISnackBar, VitamUISnackBarComponent } from '../shared/vitamui-snack-bar'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class AuditService extends SearchService<Event> { - constructor( private operationApiService: OperationApiService, private logbookApiService: LogbookApiService, - private accessionRegisterApiService: AccessionRegisterApiService, + private accessionRegisterApiService: AccessionRegisterSummaryApiService, private snackBar: VitamUISnackBar, - http: HttpClient) { + http: HttpClient + ) { super(http, operationApiService, 'ALL'); } - create(audit: any, headers: HttpHeaders) { for (const header in this.headers) { if (this.headers.hasOwnProperty(header)) { headers.set(header, this.headers.get(header)); } } - return this.operationApiService.runAudit(audit, headers) - .pipe( - tap( - () => { - console.log('Audit: ', audit); - this.snackBar.openFromComponent(VitamUISnackBarComponent, { - panelClass: 'vitamui-snack-bar', - data: {type: 'auditRun', id: audit.identifier}, - duration: 10000 - }); - }, - (error: any) => { - console.log('error: ', error); - if (!error || !error.error) { - return; - } - this.snackBar.open(error.error.message, null, { - panelClass: 'vitamui-snack-bar', - duration: 10000 - }); + return this.operationApiService.runAudit(audit, headers).pipe( + tap( + () => { + console.log('Audit: ', audit); + this.snackBar.openFromComponent(VitamUISnackBarComponent, { + panelClass: 'vitamui-snack-bar', + data: { type: 'auditRun', id: audit.identifier }, + duration: 10000, + }); + }, + (error: any) => { + console.log('error: ', error); + if (!error || !error.error) { + return; } - ) - ); + this.snackBar.open(error.error.message, null, { + panelClass: 'vitamui-snack-bar', + duration: 10000, + }); + } + ) + ); } download(id: string, eventType: string, accessContractId: string) { - const headers:HttpHeaders = new HttpHeaders({'X-Access-Contract-Id': accessContractId}); + const headers: HttpHeaders = new HttpHeaders({ 'X-Access-Contract-Id': accessContractId }); let downloadObservable: Observable<HttpResponse<Blob> | Blob>; let fileName: string; let downloadType: string; @@ -104,40 +102,43 @@ export class AuditService extends SearchService<Event> { } else if (eventType === 'EVIDENCE_AUDIT' || eventType === 'PROCESS_AUDIT') { fileName = id + '.jsonl'; downloadType = 'batchreport'; - downloadObservable = this.logbookApiService.downloadReport(id, downloadType, headers) + downloadObservable = this.logbookApiService.downloadReport(id, downloadType, headers); } else { fileName = id + '.json'; downloadType = 'AUDIT'; downloadObservable = this.operationApiService.downloadOperation(id, downloadType, headers); } - downloadObservable.subscribe(response => { - const element = document.createElement('a'); + downloadObservable.subscribe( + (response) => { + const element = document.createElement('a'); - let blob: Blob; - if (response instanceof HttpResponse) { - blob = new Blob([response.body], {type: 'octet/stream'}) - } else { - blob = response; - } - const url = window.URL.createObjectURL(blob); - element.href = url; + let blob: Blob; + if (response instanceof HttpResponse) { + blob = new Blob([response.body], { type: 'octet/stream' }); + } else { + blob = response; + } + const url = window.URL.createObjectURL(blob); + element.href = url; - element.download = fileName; - element.style.visibility = 'hidden'; - document.body.appendChild(element); - element.click(); - document.body.removeChild(element); - }, error => { - this.snackBar.open(error.error.message, null, { - panelClass: 'vitamui-snack-bar', - duration: 10000 - }); - }); + element.download = fileName; + element.style.visibility = 'hidden'; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); + }, + (error) => { + this.snackBar.open(error.error.message, null, { + panelClass: 'vitamui-snack-bar', + duration: 10000, + }); + } + ); } - getAllAccessionRegister(accessContractId: string): Observable<AccessionRegister[]> { - return this.accessionRegisterApiService.getAllByParams(new HttpParams(), new HttpHeaders({'X-Access-Contract-Id': accessContractId})); + getAllAccessionRegister(accessContractId: string): Observable<AccessionRegisterSummary[]> { + return this.accessionRegisterApiService.getAllByParams(new HttpParams(), new HttpHeaders({ 'X-Access-Contract-Id': accessContractId })); } checkEvidenceAuditExistence(evidenceAuditId: string): Observable<boolean> { @@ -148,8 +149,6 @@ export class AuditService extends SearchService<Event> { const pageRequest = new PageRequest(0, DEFAULT_PAGE_SIZE, '#id', Direction.ASCENDANT, JSON.stringify(criteria)); - return this.search(pageRequest).pipe( - map(res => res.length === 0) - ); + return this.search(pageRequest).pipe(map((res) => res.length === 0)); } } diff --git a/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-api.service.spec.ts b/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-api.service.spec.ts deleted file mode 100644 index c273b0bf4..000000000 --- a/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-api.service.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright French Prime minister Office/SGMAP/DINSIC/Vitam Program (2019-2020) - * and the signatories of the "VITAM - Accord du Contributeur" agreement. - * - * contact@programmevitam.fr - * - * This software is a computer program whose purpose is to implement - * implement a digital archiving front-office system for the secure and - * efficient high volumetry VITAM solution. - * - * This software is governed by the CeCILL-C license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-C - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -import {TestBed} from '@angular/core/testing'; - -import {HttpClientTestingModule} from '@angular/common/http/testing'; -import {BASE_URL, ENVIRONMENT, InjectorModule, LoggerModule} from 'ui-frontend-common'; -import {environment} from '../../../environments/environment'; -import {AccessionRegisterApiService} from './accession-register-api.service'; - -describe('AccessionRegisterApiService', () => { - beforeEach(() => TestBed.configureTestingModule({ - imports: [ - HttpClientTestingModule, - InjectorModule, - LoggerModule.forRoot() - ], - providers: [ - {provide: BASE_URL, useValue: '/fake-api'}, - {provide: ENVIRONMENT, useValue: environment} - ] - })); - - it('should be created', () => { - const service: AccessionRegisterApiService = TestBed.inject(AccessionRegisterApiService); - expect(service).toBeTruthy(); - }); -}); diff --git a/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-details-api.service.ts b/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-detail-api.service.ts similarity index 70% rename from ui/ui-frontend/projects/referential/src/app/core/api/accession-register-details-api.service.ts rename to ui/ui-frontend/projects/referential/src/app/core/api/accession-register-detail-api.service.ts index 30eba38e1..222bb41b1 100644 --- a/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-details-api.service.ts +++ b/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-detail-api.service.ts @@ -34,22 +34,24 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import {HttpClient, HttpHeaders} from '@angular/common/http'; -import {Inject, Injectable} from '@angular/core'; -import {Observable} from 'rxjs'; -import {BASE_URL, BaseHttpClient, PageRequest, PaginatedResponse} from 'ui-frontend-common'; -import {AccessionRegisterDetail} from '../../../../../vitamui-library/src/lib/models/accession-registers-detail'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Inject, Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { AccessionRegisterDetail, BASE_URL, BaseHttpClient, PageRequest, PaginatedResponse } from 'ui-frontend-common'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) -export class AccessionRegisterDetailsApiService extends BaseHttpClient<AccessionRegisterDetail> { - - constructor(http: HttpClient,@Inject(BASE_URL) baseUrl: string) { - super(http,baseUrl+'/accessionregisterdetails'); +export class AccessionRegisterDetailApiService extends BaseHttpClient<AccessionRegisterDetail> { + constructor(http: HttpClient, @Inject(BASE_URL) baseUrl: string) { + super(http, baseUrl + '/accession-register/details'); } - getAllPaginated(pageRequest: PageRequest,embedded?: string,headers?: HttpHeaders): Observable<PaginatedResponse<AccessionRegisterDetail>> { - return super.getAllPaginated(pageRequest,embedded,headers); + public getAllPaginated( + pageRequest: PageRequest, + embedded?: string, + headers?: HttpHeaders + ): Observable<PaginatedResponse<AccessionRegisterDetail>> { + return super.getAllPaginated(pageRequest, embedded, headers); } } diff --git a/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-details-api.service.spec.ts b/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-details-api.service.spec.ts deleted file mode 100644 index 22971c051..000000000 --- a/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-details-api.service.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {HttpClientTestingModule} from '@angular/common/http/testing'; -import {TestBed} from '@angular/core/testing'; -import {BASE_URL,ENVIRONMENT,InjectorModule,LoggerModule} from 'ui-frontend-common'; -import {environment} from './../../../environments/environment'; -import {AccessionRegisterDetailsApiService} from './accession-register-details-api.service'; - - -describe('AccessionRegisterApiService',() => { - beforeEach(() => TestBed.configureTestingModule({ - imports: [ - HttpClientTestingModule, - InjectorModule, - LoggerModule.forRoot() - ], - providers: [ - {provide: BASE_URL,useValue: '/fake-api'}, - {provide: ENVIRONMENT,useValue: environment} - ] - })); - - it('should be created',() => { - const service: AccessionRegisterDetailsApiService=TestBed.inject(AccessionRegisterDetailsApiService); - expect(service).toBeTruthy(); - }); -}); diff --git a/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-api.service.ts b/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-summary-api.service.ts similarity index 81% rename from ui/ui-frontend/projects/referential/src/app/core/api/accession-register-api.service.ts rename to ui/ui-frontend/projects/referential/src/app/core/api/accession-register-summary-api.service.ts index d3010b83a..57eeb1dad 100644 --- a/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-api.service.ts +++ b/ui/ui-frontend/projects/referential/src/app/core/api/accession-register-summary-api.service.ts @@ -34,22 +34,20 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http'; -import {Inject, Injectable} from '@angular/core'; -import {AccessionRegister} from 'projects/vitamui-library/src/public-api'; -import {Observable} from 'rxjs'; -import {BASE_URL, BaseHttpClient} from 'ui-frontend-common'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Inject, Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { AccessionRegisterSummary, BASE_URL, BaseHttpClient } from 'ui-frontend-common'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) -export class AccessionRegisterApiService extends BaseHttpClient<AccessionRegister> { - +export class AccessionRegisterSummaryApiService extends BaseHttpClient<AccessionRegisterSummary> { constructor(http: HttpClient, @Inject(BASE_URL) baseUrl: string) { - super(http, baseUrl + '/accession-register'); + super(http, baseUrl + '/accession-register/summary'); } - getAllByParams(params: HttpParams, headers?: HttpHeaders): Observable<AccessionRegister[]> { + getAllByParams(params: HttpParams, headers?: HttpHeaders): Observable<AccessionRegisterSummary[]> { return super.getAllByParams(params, headers); } } diff --git a/ui/ui-frontend/projects/referential/src/app/logbook-management-operation/logbook-management-operation-list/logbook-management-operation-list.component.scss b/ui/ui-frontend/projects/referential/src/app/logbook-management-operation/logbook-management-operation-list/logbook-management-operation-list.component.scss index 67a47c19b..33d2d7c36 100644 --- a/ui/ui-frontend/projects/referential/src/app/logbook-management-operation/logbook-management-operation-list/logbook-management-operation-list.component.scss +++ b/ui/ui-frontend/projects/referential/src/app/logbook-management-operation/logbook-management-operation-list/logbook-management-operation-list.component.scss @@ -49,17 +49,6 @@ .refresh_text { color: black; } -.title-text { - font-family: Mulish; - font-style: normal; - font-weight: bold; - font-size: 14px; - line-height: 22px; - - letter-spacing: 0.1px; - - color: #9c31b5; -} .filter-text { font-family: Mulish; diff --git a/ui/ui-frontend/projects/referential/src/app/logbook-management-operation/logbook-management-operation.component.scss b/ui/ui-frontend/projects/referential/src/app/logbook-management-operation/logbook-management-operation.component.scss index bd7c5b002..fdbd2c009 100644 --- a/ui/ui-frontend/projects/referential/src/app/logbook-management-operation/logbook-management-operation.component.scss +++ b/ui/ui-frontend/projects/referential/src/app/logbook-management-operation/logbook-management-operation.component.scss @@ -39,16 +39,8 @@ cursor: pointer; } -.title-text { - font-family: Mulish; - font-style: normal; - font-weight: bold; - font-size: 14px; - line-height: 22px; - - letter-spacing: 0.1px; - - color: #9c31b5; +.refresh_text { + color: black; } .filter-text { diff --git a/ui/ui-frontend/projects/referential/src/assets/i18n/en.json b/ui/ui-frontend/projects/referential/src/assets/i18n/en.json index 59d4c4361..f73a77046 100644 --- a/ui/ui-frontend/projects/referential/src/assets/i18n/en.json +++ b/ui/ui-frontend/projects/referential/src/assets/i18n/en.json @@ -97,6 +97,11 @@ "STATUS": "Status", "NO_RESULT": "No result", "LOAD_MORE_RESULTS": "Load more results..." + }, + "STATUS": { + "STORED_AND_UPDATED": "Partially eliminated or transferred", + "STORED_AND_COMPLETED": "In stock and complete", + "UNSTORED": "Completely eliminated or transferred" } } } diff --git a/ui/ui-frontend/projects/referential/src/assets/i18n/fr.json b/ui/ui-frontend/projects/referential/src/assets/i18n/fr.json index 2eac15f45..fa87f83d4 100644 --- a/ui/ui-frontend/projects/referential/src/assets/i18n/fr.json +++ b/ui/ui-frontend/projects/referential/src/assets/i18n/fr.json @@ -97,6 +97,11 @@ "STATUS": "Statut", "NO_RESULT": "Aucun résultat", "LOAD_MORE_RESULTS": "Afficher plus de résultats..." + }, + "STATUS": { + "STORED_AND_UPDATED": "Partiellement éliminée ou transférée", + "STORED_AND_COMPLETED": "En stock et complète", + "UNSTORED": "Totalement éliminée ou transférée" } } } diff --git a/ui/ui-frontend/projects/referential/src/sass/styles.scss b/ui/ui-frontend/projects/referential/src/sass/styles.scss index 775e2855c..6dfb4edfe 100644 --- a/ui/ui-frontend/projects/referential/src/sass/styles.scss +++ b/ui/ui-frontend/projects/referential/src/sass/styles.scss @@ -60,3 +60,13 @@ vitamui-common-slide-toggle { margin: 0 auto; padding: 0 40px; } + +.title-text { + font-family: Mulish; + font-style: normal; + font-weight: bold; + font-size: 14px; + line-height: 22px; + letter-spacing: 0.1px; + color: #9c31b5; +} diff --git a/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers-detail.ts b/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers-detail.ts deleted file mode 100644 index 021b0c6ea..000000000 --- a/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers-detail.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {AccessionRegisters} from './accession-registers'; -import {AccessionRegisterStatus} from './accession-registers-status'; -import {RegisterValueDetailModel} from './register-value-detail-model'; -import {RegisterValueEventModel} from './register-value-event-model'; - -export interface AccessionRegisterDetail extends AccessionRegisters { - - submissionAgency: string; - archivalAgreement: string; - originatingAgencyLabel: string; - startDate: string; - endDate: string; - lastUpdate: string; - opi: string; - opc: string; - opType: string; - acquisitionInformation: string; - RegisterValueEventModel: RegisterValueEventModel[]; - status: AccessionRegisterStatus; - objectSize: RegisterValueDetailModel; - totalObjectsGroups: RegisterValueDetailModel; - totalObjects: RegisterValueDetailModel; - totalUnits: RegisterValueDetailModel; - operationsIds: string[]; -} diff --git a/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers.ts b/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers.ts deleted file mode 100644 index 5cd3a1bc0..000000000 --- a/ui/ui-frontend/projects/vitamui-library/src/lib/models/accession-registers.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {Id} from 'ui-frontend-common'; - -export interface AccessionRegisters extends Id { - tenant: number; - version: number; - originatingAgency: string; -} diff --git a/ui/ui-frontend/projects/vitamui-library/src/lib/models/register-value-event-model.ts b/ui/ui-frontend/projects/vitamui-library/src/lib/models/register-value-event-model.ts deleted file mode 100644 index be090143d..000000000 --- a/ui/ui-frontend/projects/vitamui-library/src/lib/models/register-value-event-model.ts +++ /dev/null @@ -1,10 +0,0 @@ - -export interface RegisterValueEventModel { - Opc: number; - OpType: number; - Gots: number; - Units: number; - Objects: number; - ObjSize: number; - CreationDate: string; -} diff --git a/ui/ui-frontend/projects/vitamui-library/src/public-api.ts b/ui/ui-frontend/projects/vitamui-library/src/public-api.ts index 9f166c053..290b8d199 100644 --- a/ui/ui-frontend/projects/vitamui-library/src/public-api.ts +++ b/ui/ui-frontend/projects/vitamui-library/src/public-api.ts @@ -19,7 +19,6 @@ export * from './lib/components/filing-plan/filing-plan.module'; /* MODELS */ export * from './lib/models/access-contract'; -export * from './lib/models/accession-register'; export * from './lib/models/agency'; export * from './lib/models/api-unit-object.interface'; export * from './lib/models/autocomplete-response.interface'; diff --git a/ui/ui-referential/pom.xml b/ui/ui-referential/pom.xml index 1d8e93889..9f34ebcb6 100644 --- a/ui/ui-referential/pom.xml +++ b/ui/ui-referential/pom.xml @@ -182,7 +182,7 @@ <executable>true</executable> <attach>false</attach> <!-- Need to use the original jar for integration-tests --> <mainClass>fr.gouv.vitamui.referential.ReferentialApplication</mainClass> - <jvmArguments>-Xmx512m</jvmArguments> + <jvmArguments>-Xmx512m</jvmArguments> <arguments> <!-- use src/main/config/application-dev.yml when using mvn spring-boot:run --> <!-- See : https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files --> diff --git a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/config/ReferentialContextConfiguration.java b/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/config/ReferentialContextConfiguration.java index 6100a7972..6928f22f3 100644 --- a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/config/ReferentialContextConfiguration.java +++ b/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/config/ReferentialContextConfiguration.java @@ -46,7 +46,7 @@ import fr.gouv.vitamui.iam.external.client.IamExternalWebClientFactory; import fr.gouv.vitamui.iam.external.client.TenantExternalRestClient; import fr.gouv.vitamui.referential.external.client.AccessContractExternalRestClient; import fr.gouv.vitamui.referential.external.client.AccessionRegisterDetailExternalRestClient; -import fr.gouv.vitamui.referential.external.client.AccessionRegisterExternalRestClient; +import fr.gouv.vitamui.referential.external.client.AccessionRegisterSummaryExternalRestClient; import fr.gouv.vitamui.referential.external.client.AgencyExternalRestClient; import fr.gouv.vitamui.referential.external.client.AgencyExternalWebClient; import fr.gouv.vitamui.referential.external.client.ContextExternalRestClient; @@ -153,7 +153,7 @@ public class ReferentialContextConfiguration extends AbstractContextConfiguratio } @Bean - public AccessionRegisterExternalRestClient accessionRegisterExternalRestClient(final ReferentialExternalRestClientFactory referentialExternalRestClientFactory) { + public AccessionRegisterSummaryExternalRestClient accessionRegisterExternalRestClient(final ReferentialExternalRestClientFactory referentialExternalRestClientFactory) { return referentialExternalRestClientFactory.getAccessionRegisterExternalRestClient(); } diff --git a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/rest/AccessionRegisterController.java b/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/rest/AccessionRegisterController.java index 982db7a0a..12176ef14 100644 --- a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/rest/AccessionRegisterController.java +++ b/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/rest/AccessionRegisterController.java @@ -36,18 +36,22 @@ */ package fr.gouv.vitamui.referential.rest; +import fr.gouv.vitamui.commons.api.domain.DirectionDto; +import fr.gouv.vitamui.commons.api.domain.PaginatedValuesDto; import fr.gouv.vitamui.commons.api.logger.VitamUILogger; import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; import fr.gouv.vitamui.commons.rest.AbstractUiRestController; import fr.gouv.vitamui.commons.rest.util.RestUtils; +import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailDto; import fr.gouv.vitamui.referential.common.dto.AccessionRegisterSummaryDto; -import fr.gouv.vitamui.referential.service.AccessionRegisterService; +import fr.gouv.vitamui.referential.service.AccessionRegisterDetailService; +import fr.gouv.vitamui.referential.service.AccessionRegisterSummaryService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @@ -64,22 +68,36 @@ import java.util.Optional; @Produces("application/json") public class AccessionRegisterController extends AbstractUiRestController { - protected final AccessionRegisterService service; + protected final AccessionRegisterSummaryService summaryService; + protected final AccessionRegisterDetailService detailsService; private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance(AccessionRegisterController.class); - @Autowired - public AccessionRegisterController(final AccessionRegisterService service) { - this.service = service; + public AccessionRegisterController(AccessionRegisterSummaryService summaryService, + AccessionRegisterDetailService detailsService) { + this.summaryService = summaryService; + this.detailsService = detailsService; } - @ApiOperation(value = "Get entity") - @GetMapping + @ApiOperation(value = "Get accession register summary entities") + @GetMapping("/summary") @ResponseStatus(HttpStatus.OK) public Collection<AccessionRegisterSummaryDto> getAll(final Optional<String> criteria) { LOGGER.debug("Get all with criteria={}", criteria); RestUtils.checkCriteria(criteria); - return service.getAll(buildUiHttpContext(), criteria); + return summaryService.getAll(buildUiHttpContext(), criteria); + } + + @ApiOperation(value = "Get accession register details entities paginated") + @GetMapping(value = "/details", params = {"page", "size"}) + @ResponseStatus(HttpStatus.OK) + public PaginatedValuesDto<AccessionRegisterDetailDto> getAllPaginated(@RequestParam final Integer page, + @RequestParam final Integer size, + @RequestParam final Optional<String> criteria, @RequestParam final Optional<String> orderBy, + @RequestParam final Optional<DirectionDto> direction) { + LOGGER.debug("getAllPaginated page={}, size={}, criteria={}, orderBy={}, ascendant={}", page, size, criteria, + orderBy, direction); + return detailsService.getAllPaginated(page, size, criteria, orderBy, direction, buildUiHttpContext()); } } diff --git a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/rest/AccessionRegisterDetailController.java b/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/rest/AccessionRegisterDetailController.java deleted file mode 100644 index 51cf2e4a7..000000000 --- a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/rest/AccessionRegisterDetailController.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright French Prime minister Office/SGMAP/DINSIC/Vitam Program (2019-2020) - * and the signatories of the "VITAM - Accord du Contributeur" agreement. - * - * contact@programmevitam.fr - * - * This software is a computer program whose purpose is to implement - * implement a digital archiving front-office system for the secure and - * efficient high volumetry VITAM solution. - * - * This software is governed by the CeCILL-C license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-C - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -package fr.gouv.vitamui.referential.rest; - -import fr.gouv.vitamui.commons.api.domain.DirectionDto; -import fr.gouv.vitamui.commons.api.domain.PaginatedValuesDto; -import fr.gouv.vitamui.commons.api.logger.VitamUILogger; -import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; -import fr.gouv.vitamui.commons.rest.AbstractUiRestController; -import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailDto; -import fr.gouv.vitamui.referential.service.AccessionRegisterDetailService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; - -import javax.ws.rs.Consumes; -import javax.ws.rs.Produces; -import java.util.Optional; - - -@Api(tags = "accessionregisterdetails") -@RestController -@RequestMapping("${ui-referential.prefix}/accessionregisterdetails") -@Consumes("application/json") -@Produces("application/json") -public class AccessionRegisterDetailController extends AbstractUiRestController { - - protected final AccessionRegisterDetailService service; - - private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance(AccessionRegisterController.class); - - @Autowired - public AccessionRegisterDetailController(final AccessionRegisterDetailService service) { - this.service = service; - } - - @ApiOperation(value = "Get accession register details entities paginated") - @GetMapping(params = { "page", "size" }) - @ResponseStatus(HttpStatus.OK) - public PaginatedValuesDto<AccessionRegisterDetailDto> getAllPaginated(@RequestParam final Integer page, @RequestParam final Integer size, - @RequestParam final Optional<String> criteria, @RequestParam final Optional<String> orderBy, @RequestParam final Optional<DirectionDto> direction) { - LOGGER.debug("getAllPaginated page={}, size={}, criteria={}, orderBy={}, ascendant={}", page, size, criteria, orderBy, direction); - return service.getAllPaginated(page, size, criteria, orderBy, direction, buildUiHttpContext()); - } - -} diff --git a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterDetailService.java b/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterDetailService.java index c980f8eae..8906ab334 100644 --- a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterDetailService.java +++ b/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterDetailService.java @@ -67,5 +67,4 @@ public class AccessionRegisterDetailService extends AbstractPaginateService<Acce public BasePaginatingAndSortingRestClient<AccessionRegisterDetailDto, ExternalHttpContext> getClient() { return client; } - } diff --git a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterService.java b/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterSummaryService.java similarity index 90% rename from ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterService.java rename to ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterSummaryService.java index 2696e4894..74e8516fd 100644 --- a/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterService.java +++ b/ui/ui-referential/src/main/java/fr/gouv/vitamui/referential/service/AccessionRegisterSummaryService.java @@ -39,7 +39,7 @@ package fr.gouv.vitamui.referential.service; import fr.gouv.vitamui.commons.rest.client.BaseCrudRestClient; import fr.gouv.vitamui.commons.rest.client.ExternalHttpContext; import fr.gouv.vitamui.referential.common.dto.AccessionRegisterSummaryDto; -import fr.gouv.vitamui.referential.external.client.AccessionRegisterExternalRestClient; +import fr.gouv.vitamui.referential.external.client.AccessionRegisterSummaryExternalRestClient; import fr.gouv.vitamui.ui.commons.service.AbstractCrudService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -48,12 +48,12 @@ import java.util.Collection; import java.util.Optional; @Service -public class AccessionRegisterService extends AbstractCrudService<AccessionRegisterSummaryDto> { +public class AccessionRegisterSummaryService extends AbstractCrudService<AccessionRegisterSummaryDto> { - private AccessionRegisterExternalRestClient client; + private final AccessionRegisterSummaryExternalRestClient client; @Autowired - public AccessionRegisterService(final AccessionRegisterExternalRestClient client) { + public AccessionRegisterSummaryService(final AccessionRegisterSummaryExternalRestClient client) { this.client = client; } diff --git a/ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/SwaggerJsonFileGenerationTest.java b/ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/SwaggerJsonFileGenerationTest.java index 4cdbaab5b..2d693a46c 100644 --- a/ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/SwaggerJsonFileGenerationTest.java +++ b/ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/SwaggerJsonFileGenerationTest.java @@ -70,7 +70,7 @@ public class SwaggerJsonFileGenerationTest extends AbstractSwaggerJsonFileGenera private AccessContractService accessContractService; @MockBean - private AccessionRegisterService accessionRegisterService; + private AccessionRegisterSummaryService accessionRegisterSummaryService; @MockBean private AgencyService agencyService; diff --git a/ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/rest/AccessionRegisterDetailControllerTest.java b/ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/rest/AccessionRegisterControllerTest.java similarity index 69% rename from ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/rest/AccessionRegisterDetailControllerTest.java rename to ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/rest/AccessionRegisterControllerTest.java index f9aa71d51..1f444870f 100644 --- a/ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/rest/AccessionRegisterDetailControllerTest.java +++ b/ui/ui-referential/src/test/java/fr/gouv/vitamui/referential/rest/AccessionRegisterControllerTest.java @@ -6,6 +6,7 @@ import fr.gouv.vitamui.commons.api.logger.VitamUILogger; import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory; import fr.gouv.vitamui.referential.common.dto.AccessionRegisterDetailDto; import fr.gouv.vitamui.referential.service.AccessionRegisterDetailService; +import fr.gouv.vitamui.referential.service.AccessionRegisterSummaryService; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; @@ -20,20 +21,23 @@ import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(SpringExtension.class) -@WebMvcTest(value = AccessionRegisterDetailController.class) -class AccessionRegisterDetailControllerTest extends UiReferentialRestControllerTest<AccessionRegisterDetailDto> { +@WebMvcTest(value = AccessionRegisterController.class) +class AccessionRegisterControllerTest extends UiReferentialRestControllerTest<AccessionRegisterDetailDto> { @MockBean - private AccessionRegisterDetailService service; + private AccessionRegisterSummaryService summaryService; + + @MockBean + private AccessionRegisterDetailService detailsService; @Test void should_call_the_corresponding_service_once_when_paginated_api_is_called() throws Exception { - //Given //When - ResultActions resultActions = super.performGet("/", ImmutableMap.of("page", 1, "size", 20), super.getHeaders()); + //Given // When + ResultActions resultActions = super.performGet("/details", ImmutableMap.of("page", 1, "size", 20), super.getHeaders()); //Then resultActions.andExpect(status().isOk()); - verify(service, times(1)).getAllPaginated(any(), any(), any(), any(), any(), any()); + verify(detailsService, times(1)).getAllPaginated(any(), any(), any(), any(), any(), any()); } @Override @@ -48,17 +52,17 @@ class AccessionRegisterDetailControllerTest extends UiReferentialRestControllerT @Override protected VitamUILogger getLog() { - return VitamUILoggerFactory.getInstance(AccessionRegisterDetailControllerTest.class); + return VitamUILoggerFactory.getInstance(AccessionRegisterControllerTest.class); } @Override protected void preparedServices() { PaginatedValuesDto<AccessionRegisterDetailDto> response = new PaginatedValuesDto<>(); - when(service.getAllPaginated(any(), any(), any(), any(), any(), any())).thenReturn(response); + when(detailsService.getAllPaginated(any(), any(), any(), any(), any(), any())).thenReturn(response); } @Override protected String getRessourcePrefix() { - return "/referential-api/accessionregisterdetails"; + return "/referential-api/accession-register"; } } -- GitLab