From 5e1ff4eba36fd0a7f409205fd70479f9febd1292 Mon Sep 17 00:00:00 2001
From: jnizet <jb@ninja-squad.com>
Date: Fri, 5 Nov 2021 10:43:49 +0100
Subject: [PATCH] feat: externalize the faidare search URL

---
 .../urgi/faidare/config/FaidareProperties.java     | 14 +++++++++++++-
 .../urgi/faidare/web/thymeleaf/FaidareDialect.java |  8 +++++---
 .../web/thymeleaf/FaidareExpressionFactory.java    |  8 +++++++-
 .../faidare/web/thymeleaf/FaidareExpressions.java  |  6 ++++--
 backend/src/main/resources/application.yml         |  2 ++
 5 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java b/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java
index c4cba985..ea790cf2 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java
@@ -31,6 +31,13 @@ public class FaidareProperties {
     private String securityUserGroupWsUrl;
     private String securityUserGroupWsToken;
 
+    /**
+     * The URL used by the germplasm card to generate links to the faidare search application
+     * (i.e. the faidare flavor of data-discovery).
+     */
+    @NotBlank
+    private String searchUrl;
+
     private List<DataSourceImpl> dataSources = new ArrayList<>();
 
     public String getElasticsearchIndexingTemplate() {
@@ -118,6 +125,11 @@ public class FaidareProperties {
             .replace("{documentType}", documentType.toLowerCase());
     }
 
+    public String getSearchUrl() {
+        return searchUrl;
+    }
 
-
+    public void setSearchUrl(String searchUrl) {
+        this.searchUrl = searchUrl;
+    }
 }
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareDialect.java b/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareDialect.java
index 2a02a842..26bfc561 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareDialect.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareDialect.java
@@ -1,5 +1,6 @@
 package fr.inra.urgi.faidare.web.thymeleaf;
 
+import fr.inra.urgi.faidare.config.FaidareProperties;
 import org.springframework.stereotype.Component;
 import org.thymeleaf.dialect.AbstractDialect;
 import org.thymeleaf.dialect.IExpressionObjectDialect;
@@ -12,14 +13,15 @@ import org.thymeleaf.expression.IExpressionObjectFactory;
 @Component
 public class FaidareDialect extends AbstractDialect implements IExpressionObjectDialect {
 
-    private final IExpressionObjectFactory FAIDARE_EXPRESSION_OBJECTS_FACTORY = new FaidareExpressionFactory();
+    private final IExpressionObjectFactory faidareExpressionFactory;
 
-    protected FaidareDialect() {
+    public FaidareDialect(FaidareProperties faidareProperties) {
         super("faidare");
+        faidareExpressionFactory = new FaidareExpressionFactory(faidareProperties.getSearchUrl());
     }
 
     @Override
     public IExpressionObjectFactory getExpressionObjectFactory() {
-        return FAIDARE_EXPRESSION_OBJECTS_FACTORY;
+        return faidareExpressionFactory;
     }
 }
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareExpressionFactory.java b/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareExpressionFactory.java
index e873375c..8ccd5fe9 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareExpressionFactory.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareExpressionFactory.java
@@ -16,6 +16,12 @@ public class FaidareExpressionFactory implements IExpressionObjectFactory {
     private static final Set<String> ALL_EXPRESSION_OBJECT_NAMES =
         Collections.singleton(FAIDARE_EVALUATION_VARIABLE_NAME);
 
+    private final String searchUrl;
+
+    public FaidareExpressionFactory(String searchUrl) {
+        this.searchUrl = searchUrl;
+    }
+
     @Override
     public Set<String> getAllExpressionObjectNames() {
         return ALL_EXPRESSION_OBJECT_NAMES;
@@ -23,7 +29,7 @@ public class FaidareExpressionFactory implements IExpressionObjectFactory {
 
     @Override
     public Object buildObject(IExpressionContext context, String expressionObjectName) {
-        return new FaidareExpressions(context.getLocale());
+        return new FaidareExpressions(context.getLocale(), searchUrl);
     }
 
     @Override
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareExpressions.java b/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareExpressions.java
index e5da6215..a8828383 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareExpressions.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/web/thymeleaf/FaidareExpressions.java
@@ -57,9 +57,11 @@ public class FaidareExpressions {
     }
 
     private final Locale locale;
+    private final String searchUrl;
 
-    public FaidareExpressions(Locale locale) {
+    public FaidareExpressions(Locale locale, String searchUrl) {
         this.locale = locale;
+        this.searchUrl = searchUrl;
     }
 
     public String toSiteParam(String siteId) {
@@ -85,7 +87,7 @@ public class FaidareExpressions {
     }
 
     public String searchUrl() {
-        return "https://urgi.versailles.inrae.fr/faidare/search";
+        return searchUrl;
     }
 
     private String collPopTitle(CollPopVO collPopVO, Function<String, String> nameTransformer) {
diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml
index 8a14dabc..c9141304 100644
--- a/backend/src/main/resources/application.yml
+++ b/backend/src/main/resources/application.yml
@@ -43,6 +43,8 @@ faidare:
   security-user-group-ws-url:
   security-user-group-ws-token:
 
+  search-url: https://urgi.versailles.inrae.fr/faidare/search
+
   # TODO: Update URIs to match URL (update in generated JSON document too)
   # Warning! URIs should match with FAIDARE datadiscovery 'schema:includedInDataCatalog' field value
   data-sources:
-- 
GitLab