From 0a9d3b1065cc0c611b8f2d2632ce905614ac2b2e Mon Sep 17 00:00:00 2001
From: "Stefan E. Funk" <funk@sub.uni-goettingen.de>
Date: Fri, 23 Jul 2021 10:41:48 +0200
Subject: [PATCH] Fix RecordDelivererDATACITE bean configuration issue Only
 configure bean ONCE now

---
 .../textgrid/middleware/OAIPMHUtilities.java  | 12 ++-
 .../middleware/RecordDelivererDATACITE.java   | 87 ++++++++++---------
 .../RecordListDelivererDATACITE.java          | 31 ++-----
 3 files changed, 65 insertions(+), 65 deletions(-)

diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java
index 6ce3185e..2cd145cd 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java
@@ -42,7 +42,6 @@ import info.textgrid.middleware.oaipmh.RecordType;
 import info.textgrid.middleware.oaipmh.Resource;
 import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 import info.textgrid.namespaces.middleware.tgauth.ProjectInfo;
-import io.swagger.v3.core.util.Json;
 
 /**
  * <p>
@@ -534,6 +533,7 @@ public class OAIPMHUtilities {
    * @param propFile
    * @return
    */
+  @Deprecated
   public static String[][] fetchArrayFromPropFile(String propertyName, Properties propFile) {
 
     // FIXME Why get a 2D array and only use the first element in RecordDelivererDatacite?
@@ -553,6 +553,16 @@ public class OAIPMHUtilities {
     return array;
   }
 
+  /**
+   * @param propertyName
+   * @param propFile
+   * @return
+   */
+  public static String[] fetchFieldsFromPropFile(String propertyName, Properties propFile) {
+    // Trim with whitespaces, so we get the array with results trimmed.
+    return propFile.getProperty(propertyName).split("\\s*,\\s*");
+  }
+
   /**
    * <p>
    * Check identifier for prefixes: Remove "textgrid:" and "hdl:" prefixes.
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java
index a4edb615..b2f6eb90 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java
@@ -114,8 +114,19 @@ public class RecordDelivererDATACITE extends RecordDelivererAbstract {
 
     System.out.println("idInElasticSearchIndex: " + idInElasticSearchIndex);
 
+    System.out.println("idInElasticSearchIndex: "
+        + idInElasticSearchIndex.replace(this.repositoryObjectURIPrefix, ""));
+
     GetRecordType getRecordType = new GetRecordType();
 
+    JSONObject urgli = new JSONObject(OAIPMHUtilities
+        .getRcordByIDFromElasticSearch(OAI_ESClient.getEsIndex(),
+            idInElasticSearchIndex.replace(this.repositoryObjectURIPrefix, ""), this.fields,
+            Strings.EMPTY_ARRAY)
+        .getSource());
+
+    System.out.println("urgli: " + urgli);
+
     // Get ES object.
     this.jsonObj = new JSONObject(OAIPMHUtilities
         .getRcordByIDFromElasticSearch(OAI_ESClient.getEsIndex(),
@@ -910,7 +921,7 @@ public class RecordDelivererDATACITE extends RecordDelivererAbstract {
      */
     // TODO: fields from config file
     // TODO: for each field
-    // FIXME fu: Adapt to DARIAH!
+    // TODO: Adapt to DARIAH!
     // return OAIPMHUtilities.fieldLoader(jsonObj,
     // "edition.source.bibliographicCitation.publisher.value");
 
@@ -940,8 +951,8 @@ public class RecordDelivererDATACITE extends RecordDelivererAbstract {
 
   /**
    * <p>
-   * Set all the props from config file, if bean can not be configured by spring if doing a
-   * newRecordDelivererDATACITE().
+   * Set all the props from config file, if bean can not be configured by spring if doing a new
+   * RecordDelivererDATACITE().
    * </p>
    * 
    * @throws IOException
@@ -956,14 +967,8 @@ public class RecordDelivererDATACITE extends RecordDelivererAbstract {
     p.load(input);
 
     // Set basic fields.
-    this.setFields(OAIPMHUtilities.fetchArrayFromPropFile("fields", p)[0]);
-
-    System.out.println("kakki");
-    for (int i = 0; i < this.fields.length; i++) {
-      System.out.println(this.fields[i]);
-    }
-
-    this.setWorkFields(OAIPMHUtilities.fetchArrayFromPropFile("workFields", p)[0]);
+    this.fields = OAIPMHUtilities.fetchFieldsFromPropFile("fields", p);
+    this.setWorkFields(OAIPMHUtilities.fetchFieldsFromPropFile("workFields", p));
 
     this.setFormatField(p.getProperty("formatField"));
     this.setFormatToFilter(p.getProperty("formatToFilter"));
@@ -973,48 +978,50 @@ public class RecordDelivererDATACITE extends RecordDelivererAbstract {
     this.setIdentifierField(p.getProperty("identifierField"));
 
     // Set DC fields.
-
-    this.setContributor(OAIPMHUtilities.fetchArrayFromPropFile("contributorList", p)[0]);
-    this.setCoverage(OAIPMHUtilities.fetchArrayFromPropFile("coverageList", p)[0]);
-    this.setCreator(OAIPMHUtilities.fetchArrayFromPropFile("creatorList", p)[0]);
-    this.setDates(OAIPMHUtilities.fetchArrayFromPropFile("dateList", p)[0]);
-    this.setDescriptions(OAIPMHUtilities.fetchArrayFromPropFile("descriptionList", p)[0]);
-    this.setFormats(OAIPMHUtilities.fetchArrayFromPropFile("formatList", p)[0]);
-    this.setIdentifiers(OAIPMHUtilities.fetchArrayFromPropFile("identifierList", p)[0]);
-    this.setLanguages(OAIPMHUtilities.fetchArrayFromPropFile("languageList", p)[0]);
-    this.setPublishers(OAIPMHUtilities.fetchArrayFromPropFile("publisherList", p)[0]);
-    this.setRelations(OAIPMHUtilities.fetchArrayFromPropFile("relationList", p)[0]);
-    this.setRights(OAIPMHUtilities.fetchArrayFromPropFile("rightsList", p)[0]);
-    this.setSources(OAIPMHUtilities.fetchArrayFromPropFile("sourceList", p)[0]);
-    this.setSubjects(OAIPMHUtilities.fetchArrayFromPropFile("subjectList", p)[0]);
-    this.setTitles(OAIPMHUtilities.fetchArrayFromPropFile("titleList", p)[0]);
-    this.setTypes(OAIPMHUtilities.fetchArrayFromPropFile("typeList", p)[0]);
+    this.setContributor(OAIPMHUtilities.fetchFieldsFromPropFile("contributorList", p));
+    this.setCoverage(OAIPMHUtilities.fetchFieldsFromPropFile("coverageList", p));
+    this.setCreator(OAIPMHUtilities.fetchFieldsFromPropFile("creatorList", p));
+    this.setDates(OAIPMHUtilities.fetchFieldsFromPropFile("dateList", p));
+    this.setDescriptions(OAIPMHUtilities.fetchFieldsFromPropFile("descriptionList", p));
+    this.setFormats(OAIPMHUtilities.fetchFieldsFromPropFile("formatList", p));
+    this.setIdentifiers(OAIPMHUtilities.fetchFieldsFromPropFile("identifierList", p));
+    this.setLanguages(OAIPMHUtilities.fetchFieldsFromPropFile("languageList", p));
+    this.setPublishers(OAIPMHUtilities.fetchFieldsFromPropFile("publisherList", p));
+    this.setRelations(OAIPMHUtilities.fetchFieldsFromPropFile("relationList", p));
+    this.setRights(OAIPMHUtilities.fetchFieldsFromPropFile("rightsList", p));
+    this.setSources(OAIPMHUtilities.fetchFieldsFromPropFile("sourceList", p));
+    this.setSubjects(OAIPMHUtilities.fetchFieldsFromPropFile("subjectList", p));
+    this.setTitles(OAIPMHUtilities.fetchFieldsFromPropFile("titleList", p));
+    this.setTypes(OAIPMHUtilities.fetchFieldsFromPropFile("typeList", p));
 
     // Set OpenAire config fields.
     this.setOarIdentifierField(p.getProperty("oar.identifierField"));
     this.setOarSizeField(p.getProperty("oar.sizeField"));
-    this.setOarTitleFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.titleFields", p)[0]);
-    this.setOarDateFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.dateFields", p)[0]);
+    this.setOarTitleFields(OAIPMHUtilities.fetchFieldsFromPropFile("oar.titleFields", p));
+    this.setOarDateFields(OAIPMHUtilities.fetchFieldsFromPropFile("oar.dateFields", p));
     this.setOarContributorFields(
-        OAIPMHUtilities.fetchArrayFromPropFile("oar.contributorFields", p)[0]);
-    this.setOarCreatorFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.creatorFields", p)[0]);
+        OAIPMHUtilities.fetchFieldsFromPropFile("oar.contributorFields", p));
+    this.setOarCreatorFields(OAIPMHUtilities.fetchFieldsFromPropFile("oar.creatorFields", p));
     this.setOarLanguageFields(
-        OAIPMHUtilities.fetchArrayFromPropFile("oar.languageFields", p)[0]);
+        OAIPMHUtilities.fetchFieldsFromPropFile("oar.languageFields", p));
     this.setOarAlternateIdentifierFields(
-        OAIPMHUtilities.fetchArrayFromPropFile("oar.alternateIdentifierFields", p)[0]);
-    this.setOarFormatFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.formatFields", p)[0]);
-    this.setOarRightsFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.rightsFields", p)[0]);
+        OAIPMHUtilities.fetchFieldsFromPropFile("oar.alternateIdentifierFields", p));
+    this.setOarFormatFields(OAIPMHUtilities.fetchFieldsFromPropFile("oar.formatFields", p));
+    this.setOarRightsFields(OAIPMHUtilities.fetchFieldsFromPropFile("oar.rightsFields", p));
     this.setOarDescriptionFields(
-        OAIPMHUtilities.fetchArrayFromPropFile("oar.descriptionFields", p)[0]);
+        OAIPMHUtilities.fetchFieldsFromPropFile("oar.descriptionFields", p));
     this.setOarRelatedIdentifierFields(
-        OAIPMHUtilities.fetchArrayFromPropFile("oar.relatedIdentifierFields", p)[0]);
+        OAIPMHUtilities.fetchFieldsFromPropFile("oar.relatedIdentifierFields", p));
     this.setOarGeoLocationFields(
-        OAIPMHUtilities.fetchArrayFromPropFile("oar.geoLocationFields", p)[0]);
-    this.setOarVersionFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.versionFields", p)[0]);
-    this.setOarSubjectFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.subjectFields", p)[0]);
+        OAIPMHUtilities.fetchFieldsFromPropFile("oar.geoLocationFields", p));
+    this.setOarVersionFields(OAIPMHUtilities.fetchFieldsFromPropFile("oar.versionFields", p));
+    this.setOarSubjectFields(OAIPMHUtilities.fetchFieldsFromPropFile("oar.subjectFields", p));
 
+    // Set more fields.
     this.setRelationToWorkObject(p.getProperty("oar.relationToWorkObject"));
     this.setHandle(p.getProperty("oar.handle"));
+
+    input.close();
   }
 
   /**
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDATACITE.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDATACITE.java
index 4d292caf..b1f1e7b9 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDATACITE.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDATACITE.java
@@ -53,6 +53,13 @@ public class RecordListDelivererDATACITE extends RecordListDelivererAbstract {
 
     ListRecordsType openAireRecordList = new ListRecordsType();
 
+    // Create one RecordDeliverer only, to configure all fields only ONCE.
+    // FIYME May be solved using spring configuration, but I do not know how!
+    RecordDelivererDATACITE openAireRecord =
+        new RecordDelivererDATACITE(this.textgrid, this.dariah);
+    // Must be done here, as spring does not configure this bean if instantiated with "new".
+    openAireRecord.setConfigFileProps();
+
     for (String uri : getUriList(from, to, set, resumptionToken)) {
 
       log.debug("uri: " + uri);
@@ -79,30 +86,6 @@ public class RecordListDelivererDATACITE extends RecordListDelivererAbstract {
       log.debug("eventuallyChangedUri: " + eventuallyChangedUri);
 
       try {
-        RecordDelivererDATACITE openAireRecord =
-            new RecordDelivererDATACITE(this.textgrid, this.dariah);
-
-        System.out.println("  --  1  --");
-        if (openAireRecord.fields != null) {
-          for (int i = 0; i < openAireRecord.fields.length; i++) {
-            System.out.println(openAireRecord.fields[i]);
-          }
-        } else {
-          System.out.println("NULL");
-        }
-
-        // Must be done as spring does not configure this bean if instantiated here.
-        openAireRecord.setConfigFileProps();
-
-        System.out.println("  --  2  --");
-        if (openAireRecord.fields != null) {
-          for (int i = 0; i < openAireRecord.fields.length; i++) {
-            System.out.println(openAireRecord.fields[i]);
-          }
-        } else {
-          System.out.println("NULL");
-        }
-
         openAireRecordList.getRecord()
             .add(openAireRecord.getRecordById(eventuallyChangedUri).getRecord());
       } catch (DatatypeConfigurationException e) {
-- 
GitLab