From 7a8e1b9e47f7c9c756e08e24f901dac051040068 Mon Sep 17 00:00:00 2001
From: Benaissa BENARBIA <ben.benarbia@gmail.com>
Date: Tue, 22 Jun 2021 15:48:20 +0200
Subject: [PATCH] [VAS] Item 8188 Ajout de configuration pour pouvoir effectuer
 des routages entre archives search et ingest (#318)

* handle ingest routing to archives

* remove mocked services for POC

* add refererential settings

Co-authored-by: bbenarbia <benaissa.benarbia@gmail.com>
---
 .../vitamui/commons/api/CommonConstants.java  |  6 +++
 .../templates/ui-ingest/application.yml.j2    |  8 ++++
 .../templates/ui-portal/application.yml.j2    |  6 ++-
 .../ui-archive-search-application-dev.yml     |  3 +-
 .../ui-archive-search-application-recette.yml |  3 +-
 .../vitamui/ui/commons/property/BaseUrl.java  |  6 +++
 .../commons/service/ApplicationService.java   | 43 +++++++++++++------
 .../src/app/modules/startup.service.ts        | 36 ++++++++++------
 ui/ui-frontend/package-lock.json              |  2 +-
 .../ingest-preview.component.html             |  4 +-
 .../ingest-preview.component.ts               |  2 +-
 .../main/config/ui-ingest-application-dev.yml |  3 +-
 .../main/config/ui-portal-application-dev.yml |  3 ++
 13 files changed, 92 insertions(+), 33 deletions(-)

diff --git a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/CommonConstants.java b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/CommonConstants.java
index 1afb37b18..0c41fb043 100644
--- a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/CommonConstants.java
+++ b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/CommonConstants.java
@@ -193,6 +193,12 @@ public class CommonConstants {
 
     public static final String PORTAL_URL = "PORTAL_URL";
 
+    public static final String ARCHIVES_SEARCH_URL = "ARCHIVES_SEARCH_URL";
+
+    public static final String INGEST_URL = "INGEST_URL";
+
+    public static final String REFERENTIAL_URL = "REFERENTIAL_URL";
+
     public static final String CAS_LOGIN_URL = "CAS_URL";
 
     public static final String CAS_LOGOUT_URL = "CAS_LOGOUT_URL";
diff --git a/deployment/roles/vitamui/templates/ui-ingest/application.yml.j2 b/deployment/roles/vitamui/templates/ui-ingest/application.yml.j2
index 7a78b378a..f734e82d3 100644
--- a/deployment/roles/vitamui/templates/ui-ingest/application.yml.j2
+++ b/deployment/roles/vitamui/templates/ui-ingest/application.yml.j2
@@ -108,6 +108,14 @@ ui-ingest:
 {% else %}
     ingest: "{{ url_prefix }}/ingest"
 {% endif %}
+
+{% if vitamui.archive_search.base_url is defined %}
+    archives-search: "{{ vitamui.archive_search.base_url }}"
+{% else %}
+    archives-search: "{{ url_prefix }}/archive-search"
+{% endif %}
+
+
   portal-categories:
 {% for id, category in vitamui_defaults.portal_categories.items() %}
     {{ id }}:
diff --git a/deployment/roles/vitamui/templates/ui-portal/application.yml.j2 b/deployment/roles/vitamui/templates/ui-portal/application.yml.j2
index 9fe48f17c..9862200b5 100644
--- a/deployment/roles/vitamui/templates/ui-portal/application.yml.j2
+++ b/deployment/roles/vitamui/templates/ui-portal/application.yml.j2
@@ -92,7 +92,8 @@ ui-portal:
     portal: "{{ url_prefix }}" # TODO OMA : revoir avec les redirections du RP
     admin-identity: "{{ url_prefix }}/identity-admin" # TODO OMA : revoir avec les redirections du RP
     identity: "{{ url_prefix }}/identity" # TODO OMA : revoir avec les redirections du RP
-
+    archives-search: "{{ url_prefix }}/archives-search" # TODO OMA : revoir avec les redirections du RP
+    referential: "{{ url_prefix }}/referential" # TODO OMA : revoir avec les redirections du RP
 ui:
   url: "{{ url_prefix }}"
   redirect-url: ${ui.url}/${ui-prefix}
@@ -101,6 +102,9 @@ ui:
     portal: "{{ vitamui.portal.base_url}}"
     admin-identity: "{{ vitamui.identity_admin.base_url }}"
     identity: "{{ vitamui.identity.base_url }}"
+    ingest: "{{ vitamui.ingest.base_url }}"
+    archives-search: "{{ vitamui.archive_search.base_url }}"
+    referential: "{{ vitamui.referential.base_url }}"
 
 ui:
   url: "{{ vitamui.portal.base_url }}"
diff --git a/ui/ui-archive-search/src/main/config/ui-archive-search-application-dev.yml b/ui/ui-archive-search/src/main/config/ui-archive-search-application-dev.yml
index 44067daff..3efd2757f 100644
--- a/ui/ui-archive-search/src/main/config/ui-archive-search-application-dev.yml
+++ b/ui/ui-archive-search/src/main/config/ui-archive-search-application-dev.yml
@@ -70,7 +70,8 @@ ui-archive-search:
       hostname-verification: false
   base-url:
     portal: "https://dev.vitamui.com:4200"
-
+    archives-search: "https://dev.vitamui.com:4209/archive-search"
+    ingest: "https://dev.vitamui.com:4208/ingest"
 
   portal-categories:
     ingest_and_consultation:
diff --git a/ui/ui-archive-search/src/main/config/ui-archive-search-application-recette.yml b/ui/ui-archive-search/src/main/config/ui-archive-search-application-recette.yml
index b28fdf97f..a3ae35935 100644
--- a/ui/ui-archive-search/src/main/config/ui-archive-search-application-recette.yml
+++ b/ui/ui-archive-search/src/main/config/ui-archive-search-application-recette.yml
@@ -43,7 +43,8 @@ ui-archive-search:
       hostname-verification: false
   base-url:
     portal: "https://dev.vitamui.com"
-
+    archives-search: "https://dev.vitamui.com:4209/archive-search"
+    ingest: "https://dev.vitamui.com:4208/ingest"
 
   portal-categories:
     ingest_and_consultation:
diff --git a/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/property/BaseUrl.java b/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/property/BaseUrl.java
index a31831351..e31b54354 100644
--- a/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/property/BaseUrl.java
+++ b/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/property/BaseUrl.java
@@ -47,6 +47,12 @@ public class BaseUrl {
 
     private String adminIdentity;
 
+    private String archivesSearch;
+
+    private String ingest;
+
+    private String referential;
+
     private String identity;
 
 }
diff --git a/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/service/ApplicationService.java b/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/service/ApplicationService.java
index bd1483305..ba9790716 100644
--- a/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/service/ApplicationService.java
+++ b/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/service/ApplicationService.java
@@ -39,7 +39,11 @@ package fr.gouv.vitamui.ui.commons.service;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import fr.gouv.vitamui.commons.api.CommonConstants;
-import fr.gouv.vitamui.commons.api.domain.*;
+import fr.gouv.vitamui.commons.api.domain.ApplicationDto;
+import fr.gouv.vitamui.commons.api.domain.Criterion;
+import fr.gouv.vitamui.commons.api.domain.CriterionOperator;
+import fr.gouv.vitamui.commons.api.domain.QueryDto;
+import fr.gouv.vitamui.commons.api.domain.QueryOperator;
 import fr.gouv.vitamui.commons.api.enums.AttachmentType;
 import fr.gouv.vitamui.commons.api.logger.VitamUILogger;
 import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory;
@@ -63,7 +67,11 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.*;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -111,8 +119,9 @@ public class ApplicationService extends AbstractCrudService<ApplicationDto> {
 
     private Map<String, List<String>> listEnableExternalIdentifiers;
 
-    public ApplicationService(final UIProperties properties, final CasLogoutUrl casLogoutUrl, final IamExternalRestClientFactory factory,
-    final BuildProperties buildProperties) {
+    public ApplicationService(final UIProperties properties, final CasLogoutUrl casLogoutUrl,
+        final IamExternalRestClientFactory factory,
+        final BuildProperties buildProperties) {
         this.properties = properties;
         this.casLogoutUrl = casLogoutUrl;
         this.buildProperties = buildProperties;
@@ -140,7 +149,7 @@ public class ApplicationService extends AbstractCrudService<ApplicationDto> {
     }
 
     private Map<String, List<String>> getListEnableExternalIdentifiers() {
-        if(listEnableExternalIdentifiers == null) {
+        if (listEnableExternalIdentifiers == null) {
             listEnableExternalIdentifiers = autoConfigurationVitam.getTenants();
         }
         return listEnableExternalIdentifiers;
@@ -151,12 +160,13 @@ public class ApplicationService extends AbstractCrudService<ApplicationDto> {
         final ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
 
         final Map<String, List<String>> externalIdentifiers = getListEnableExternalIdentifiers();
-        LOGGER.info("Reading list of external identifiers {}", externalIdentifiers == null ? "null" : externalIdentifiers.toString());
+        LOGGER.info("Reading list of external identifiers {}",
+            externalIdentifiers == null ? "null" : externalIdentifiers.toString());
 
-        if(externalIdentifiers != null) {
-            if(listEnableExternalIdentifiers.containsKey(tenantId)) {
+        if (externalIdentifiers != null) {
+            if (listEnableExternalIdentifiers.containsKey(tenantId)) {
                 final List<String> enabledApplications = listEnableExternalIdentifiers.get(tenantId);
-                return(enabledApplications.contains(identifier));
+                return (enabledApplications.contains(identifier));
             }
         }
 
@@ -170,18 +180,23 @@ public class ApplicationService extends AbstractCrudService<ApplicationDto> {
     public Map<String, Object> getConf() {
         final Map<String, Object> configurationData = new HashMap<>();
         configurationData.put(CommonConstants.PORTAL_URL, properties.getBaseUrl().getPortal());
+        configurationData.put(CommonConstants.ARCHIVES_SEARCH_URL, properties.getBaseUrl().getArchivesSearch());
+        configurationData.put(CommonConstants.INGEST_URL, properties.getBaseUrl().getIngest());
+        configurationData.put(CommonConstants.REFERENTIAL_URL, properties.getBaseUrl().getReferential());
         configurationData.put(CommonConstants.CAS_LOGIN_URL, getCasLoginUrl());
         configurationData.put(CommonConstants.CAS_LOGOUT_URL, casLogoutUrl.getValue());
         configurationData.put(CommonConstants.UI_URL, uiUrl);
-        configurationData.put(CommonConstants.LOGOUT_REDIRECT_UI_URL, casLogoutUrl.getValueWithRedirection(uiRedirectUrl));
+        configurationData
+            .put(CommonConstants.LOGOUT_REDIRECT_UI_URL, casLogoutUrl.getValueWithRedirection(uiRedirectUrl));
         configurationData.put(CommonConstants.THEME_COLORS, properties.getThemeColors());
         configurationData.put(CommonConstants.PORTAL_TITLE, properties.getPortalTitle());
         configurationData.put(CommonConstants.PORTAL_MESSAGE, properties.getPortalMessage());
         configurationData.put(CommonConstants.CUSTOMER, properties.getCustomer());
         String versionRelease = properties.getVersionRelease();
         if (StringUtils.isEmpty(versionRelease)) {
-            versionRelease = Stream.of(buildProperties.get(VERSION_RELEASE_KEY).split("\\" + DELIMITER)).limit(2).map(Object::toString)
-                    .collect(Collectors.joining(DELIMITER));
+            versionRelease = Stream.of(buildProperties.get(VERSION_RELEASE_KEY).split("\\" + DELIMITER)).limit(2)
+                .map(Object::toString)
+                .collect(Collectors.joining(DELIMITER));
 
         }
         if (StringUtils.isNotEmpty(versionRelease)) {
@@ -207,7 +222,9 @@ public class ApplicationService extends AbstractCrudService<ApplicationDto> {
 
     public String getBase64File(final String fileName, final String basePath) {
         if (StringUtils.isBlank(fileName) || StringUtils.isBlank(basePath)) {
-            LOGGER.warn(String.format("Logo information missing : cannot load logo with name \"%s\" in path \"%s\"", fileName, basePath));
+            LOGGER.warn(String
+                .format("Logo information missing : cannot load logo with name \"%s\" in path \"%s\"", fileName,
+                    basePath));
             return null;
         }
 
diff --git a/ui/ui-frontend-common/src/app/modules/startup.service.ts b/ui/ui-frontend-common/src/app/modules/startup.service.ts
index d3c823758..ffa2eec71 100644
--- a/ui/ui-frontend-common/src/app/modules/startup.service.ts
+++ b/ui/ui-frontend-common/src/app/modules/startup.service.ts
@@ -37,26 +37,24 @@
 import { Inject, Injectable } from '@angular/core';
 import { Observable, Subject } from 'rxjs';
 import { tap } from 'rxjs/operators';
-import { ApplicationService } from './application.service';
-
 import { ApplicationApiService } from './api/application-api.service';
 import { SecurityApiService } from './api/security-api.service';
 import { ApplicationId } from './application-id.enum';
+import { ApplicationService } from './application.service';
 import { AuthService } from './auth.service';
 import { WINDOW_LOCATION } from './injection-tokens';
 import { Logger } from './logger/logger';
-import { AppConfiguration, AttachmentType, AuthUser, Color } from './models';
-import {ThemeService} from './theme.service';
+import { AppConfiguration, AttachmentType, AuthUser } from './models';
+import { ThemeService } from './theme.service';
 
 const WARNING_DURATION = 2000;
 const CUSTOMER_TECHNICAL_REFERENT_KEY = 'technical-referent-email';
 const CUSTOMER_WEBSITE_URL_KEY = 'website-url';
 
 @Injectable({
-  providedIn: 'root'
+  providedIn: 'root',
 })
 export class StartupService {
-
   private configurationData: AppConfiguration;
 
   userRefresh = new Subject<any>();
@@ -65,7 +63,6 @@ export class StartupService {
 
   private CURRENT_TENANT_IDENTIFIER: string;
 
-
   constructor(
     private logger: Logger,
     private authService: AuthService,
@@ -74,12 +71,14 @@ export class StartupService {
     private themeService: ThemeService,
     private applicationService: ApplicationService,
     @Inject(WINDOW_LOCATION) private location: any
-  ) { }
+  ) {}
 
   load(): Promise<any> {
     this.configurationData = null;
 
-    return this.applicationApi.getConfiguration().toPromise()
+    return this.applicationApi
+      .getConfiguration()
+      .toPromise()
       .then((data: any) => {
         this.configurationData = data;
         this.authService.loginUrl = this.configurationData.CAS_URL;
@@ -95,7 +94,6 @@ export class StartupService {
         this.configurationData.LOGO = data[AttachmentType.Portal];
       })
       .then(() => {
-
         let customerColorMap = null;
 
         if (this.authService.user.basicCustomer.graphicIdentity.hasCustomGraphicIdentity) {
@@ -217,6 +215,21 @@ export class StartupService {
     return null;
   }
 
+  getArchivesSearchUrl(): string {
+    if (this.configurationLoaded()) {
+      return this.configurationData.ARCHIVES_SEARCH_URL;
+    }
+
+    return null;
+  }
+
+  getReferentialUrl(): string {
+      if (this.configurationLoaded()) {
+        return this.configurationData.REFERENTIAL_SEARCH_URL;
+      }
+
+      return null;
+    }
   getConfigStringValue(key: string): string {
     if (this.configurationLoaded() && this.configurationData.hasOwnProperty(key)) {
       return this.configurationData[key];
@@ -234,7 +247,7 @@ export class StartupService {
    * @param url URL to be redirected to.
    */
   redirect(url?: string) {
-    setTimeout(() => this.location.href = url ? url : this.getPortalUrl(), WARNING_DURATION);
+    setTimeout(() => (this.location.href = url ? url : this.getPortalUrl()), WARNING_DURATION);
   }
 
   getPlatformName(): string {
@@ -264,5 +277,4 @@ export class StartupService {
       return customer[CUSTOMER_WEBSITE_URL_KEY];
     }
   }
-
 }
diff --git a/ui/ui-frontend/package-lock.json b/ui/ui-frontend/package-lock.json
index 20506252e..361cfc835 100644
--- a/ui/ui-frontend/package-lock.json
+++ b/ui/ui-frontend/package-lock.json
@@ -14701,7 +14701,7 @@
     },
     "ui-frontend-common": {
       "version": "file:../ui-frontend-common/ui-frontend-common-2.1.0.tgz",
-      "integrity": "sha512-7OSXs9OJwdXy0Qd+sBm32CFHrtc/hZFrvrB6hK3FtrtSV7+OCZKzzLjaMkHj4t6rRPiH+iqK9A5A0x9otOUfXA==",
+      "integrity": "sha512-OcDeeesZmKmzZGTkTCmsz+ukXYp149Tueq5EhmSGGRUNHuk5bRrvnD0gGclWlMu8cZM23MeOD74Ac1je8sk9Sg==",
       "requires": {
         "@angular/material-moment-adapter": "^10.2.3",
         "@ngx-translate/core": "^12.0.0",
diff --git a/ui/ui-frontend/projects/ingest/src/app/ingest/ingest-preview/ingest-preview.component.html b/ui/ui-frontend/projects/ingest/src/app/ingest/ingest-preview/ingest-preview.component.html
index e046bb244..8833cee54 100644
--- a/ui/ui-frontend/projects/ingest/src/app/ingest/ingest-preview/ingest-preview.component.html
+++ b/ui/ui-frontend/projects/ingest/src/app/ingest/ingest-preview/ingest-preview.component.html
@@ -11,7 +11,7 @@
     <button mat-menu-item i18n="@@ingestPreviewDownloadATR"
             (click)="downloadATR()"
             [disabled]="ingestStatus(ingest) === 'En cours'"
-            >{{'INGEST_DETAIL.DOWNLOAD_ATR' | translate}}           
+            >{{'INGEST_DETAIL.DOWNLOAD_ATR' | translate}}
     </button>
     <button mat-menu-item i18n="@@ingestPreviewGenerateDocX" (click)="generateODTreport()"
             matTooltip="{{'INGEST_DETAIL.DOWNLOAD_DOCX' | translate}}" matTooltipClass="vitamui-tooltip"
@@ -29,6 +29,6 @@
     <mat-tab label="{{'INGEST_DETAIL.INGEST_ERROR_DETAIL' | translate}}">
       <app-ingest-errors-details-tab [ingest]="ingest"></app-ingest-errors-details-tab>
     </mat-tab>
-    
+
   </mat-tab-group>
 </div>
diff --git a/ui/ui-frontend/projects/ingest/src/app/ingest/ingest-preview/ingest-preview.component.ts b/ui/ui-frontend/projects/ingest/src/app/ingest/ingest-preview/ingest-preview.component.ts
index c2e8ad2fe..b76f407ac 100644
--- a/ui/ui-frontend/projects/ingest/src/app/ingest/ingest-preview/ingest-preview.component.ts
+++ b/ui/ui-frontend/projects/ingest/src/app/ingest/ingest-preview/ingest-preview.component.ts
@@ -47,7 +47,7 @@ export class IngestPreviewComponent implements OnInit {
 
   @Input() ingest: any; // Make a type ?
   @Output() previewClose = new EventEmitter();
- 
+
 
   constructor(private logbookService: LogbookService, private ingestService : IngestService) { }
 
diff --git a/ui/ui-ingest/src/main/config/ui-ingest-application-dev.yml b/ui/ui-ingest/src/main/config/ui-ingest-application-dev.yml
index 051960a08..69b4c9062 100644
--- a/ui/ui-ingest/src/main/config/ui-ingest-application-dev.yml
+++ b/ui/ui-ingest/src/main/config/ui-ingest-application-dev.yml
@@ -72,7 +72,8 @@ ui-ingest:
       hostname-verification: false
   base-url:
     portal: "https://dev.vitamui.com:4200"
-
+    archives-search: "https://dev.vitamui.com:4209/archive-search"
+    ingest: "https://dev.vitamui.com:4208/ingest"
   portal-categories:
     ingest_and_consultation:
       title: "Versement & consultation"
diff --git a/ui/ui-portal/src/main/config/ui-portal-application-dev.yml b/ui/ui-portal/src/main/config/ui-portal-application-dev.yml
index 2138da599..5fbbea96a 100644
--- a/ui/ui-portal/src/main/config/ui-portal-application-dev.yml
+++ b/ui/ui-portal/src/main/config/ui-portal-application-dev.yml
@@ -64,6 +64,9 @@ ui-portal:
     portal: "https://dev.vitamui.com:4200"
     admin-identity: "https://dev.vitamui.com:4201/identity"
     identity: "https://dev.vitamui.com:4201/identity"
+    archives-search: "https://dev.vitamui.com:4209/archive-search"
+    ingest: "https://dev.vitamui.com:4208/ingest"
+    referential: "https://dev.vitamui.com:4202/referential"
   customer:
     technical-referent-email: contact@programmevitam.fr
     website-url: http://www.programmevitam.fr
-- 
GitLab