From 2a1d842417bb46eb7ff67cf9ddf998d3dfc835d1 Mon Sep 17 00:00:00 2001
From: "Stefan E. Funk" <funk@sub.uni-goettingen.de>
Date: Tue, 27 Sep 2022 14:30:47 +0200
Subject: [PATCH] fix: add singleton tgcrud client

---
 .../info/textgrid/middleware/IDIOMImages.java | 14 ++++++----
 .../textgrid/middleware/OAIPMHUtilities.java  |  6 +++-
 .../test/online/OAIPMHUtilitiesOnline.java    | 13 ++++-----
 .../online/tg/TestTGListRecordsOnline.java    | 28 +++++++++++--------
 4 files changed, 35 insertions(+), 26 deletions(-)

diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java
index 78018c03..0253ea54 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java
@@ -40,7 +40,7 @@ import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 /**
  *
  */
-// FIXME Why do we have to implement three classes??
+// TODO Why do we have to implement three classes??
 public class IDIOMImages implements RecordDelivererInterface, RecordListDelivererInterface,
     IdentifierListDelivererInterface {
 
@@ -56,6 +56,8 @@ public class IDIOMImages implements RecordDelivererInterface, RecordListDelivere
   private static Map<String, Integer> cursorCollector = new Hashtable<String, Integer>();
   private static Map<String, String> fromUntilCollector = new Hashtable<String, String>();
 
+  private static CrudClient tgCrudClient;
+
   /**
    * 
    */
@@ -203,11 +205,13 @@ public class IDIOMImages implements RecordDelivererInterface, RecordListDelivere
     log.fine("tgcrud rbac sid: " + OAIPMHUtilities.hideSID(this.idiomRbacSessionID));
 
     try {
-
-      // Get TG-crud client.
-      CrudClient cc = new CrudClient(this.idiomTgcrudEndpoint).enableGzipCompression();
+      // Get TG-crud client (if not yet existing)
+      // TODO If tgcrud client has got a fix endpoint, could it be created elsewhere??
+      if (tgCrudClient == null) {
+        tgCrudClient = new CrudClient(this.idiomTgcrudEndpoint).enableGzipCompression();
+      }
       TextGridObject tgo =
-          cc.read().setTextgridUri(changedID).setSid(this.idiomRbacSessionID).execute();
+          tgCrudClient.read().setTextgridUri(changedID).setSid(this.idiomRbacSessionID).execute();
 
       // Get image object.
       immByTGObject = new ImageMetsMods(tgo);
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 aea29bc2..6647c3ef 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java
@@ -49,7 +49,7 @@ import info.textgrid.namespaces.middleware.tgauth.ProjectInfo;
  * 
  * @author Maximilian Brodhun, SUB Göttingen
  * @author Stefan E. Funk, SUB Göttingen
- * @version 2022-07-07
+ * @version 2022-09-27
  * @since 2014-01-29
  */
 public class OAIPMHUtilities {
@@ -236,12 +236,16 @@ public class OAIPMHUtilities {
    */
   public static String datestampAsString(String originalDateTimeString) throws ParseException {
 
+    log.fine("incoming date: " + originalDateTimeString);
+
     SimpleDateFormat tgItemTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S");
     Date date = tgItemTime.parse(originalDateTimeString);
     SimpleDateFormat outFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
     outFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
     String dateOutputAsString = outFormatter.format(date);
 
+    log.fine("outgoing date: " + dateOutputAsString);
+
     return dateOutputAsString;
   }
 
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/OAIPMHUtilitiesOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/OAIPMHUtilitiesOnline.java
index 4df1c699..97f65bbc 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/OAIPMHUtilitiesOnline.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/OAIPMHUtilitiesOnline.java
@@ -347,14 +347,9 @@ public class OAIPMHUtilitiesOnline {
 
         // Test resumption token tags.
         responseString = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-        System.out.println("  ##  RESPONSE" + responseString);
-
         restok = examineTGResumptionTokenTag(responseString, testOccurance, restok,
             recordsExpectedPerRequest, loopCount, threadName);
 
-        System.out.println("  ##  restok: " + restok);
-
         // Test if the header identifiers are sound.
         if (theVerb.equals(VERB_LIST_RECORDS)) {
           examineTGHeader(responseString, recordsExpectedPerRequest);
@@ -368,6 +363,8 @@ public class OAIPMHUtilitiesOnline {
       }
     }
 
+    System.out.println("  ##  RESPONSE NOTOK" + responseString);
+
     // Only check for max loops, if we do have less loops and no resumption token, it will be fine,
     // too!
     if (!restok.equals(NO_TOKEN) && loopCount < maxNumberOfPagesToTest) {
@@ -497,7 +494,7 @@ public class OAIPMHUtilitiesOnline {
         && !theResponseString.contains("metadataPrefix=\"" + OAI_DC_PREFIX + "\"")
         && !theResponseString.contains(EXPECTED_OAIDC_FORMAT_CONTENT)) {
 
-      System.out.println(theResponseString);
+      System.out.println("\tRESPONSE: " + theResponseString);
 
       String message = OAI_DC_PREFIX + " needs to deliver content with schema: "
           + EXPECTED_OAIDC_FORMAT_CONTENT + "!";
@@ -508,7 +505,7 @@ public class OAIPMHUtilitiesOnline {
             .contains("metadataPrefix=\"" + EXPECTED_IDIOMMETS_FORMAT_CONTENT + "\"")
         && !theResponseString.contains(EXPECTED_IDIOMMETS_FORMAT_CONTENT)) {
 
-      System.out.println(theResponseString);
+      System.out.println("\tRESPONSE: " + theResponseString);
 
       String message = OAI_IDIOMMETS_PREFIX + " needs to deliver content with schema: "
           + EXPECTED_IDIOMMETS_FORMAT_CONTENT + "!";
@@ -518,7 +515,7 @@ public class OAIPMHUtilitiesOnline {
         && !theResponseString.contains("metadataPrefix=\"" + OAI_DATACITE_PREFIX + "\"")
         && !theResponseString.contains(EXPECTED_DATACITE_FORMAT_CONTENT)) {
 
-      System.out.println(theResponseString);
+      System.out.println("\tRESPONSE: " + theResponseString);
 
       String message = OAI_DATACITE_PREFIX + " needs to deliver content with schema: "
           + EXPECTED_DATACITE_FORMAT_CONTENT + "!";
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java
index 7a88be98..5fadffbf 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java
@@ -24,7 +24,7 @@ import info.textgrid.middleware.test.online.OAIPMHUtilitiesOnline;
  * @version 2022-09-26
  * @since 2022-09-12
  */
-@Ignore
+// @Ignore
 public class TestTGListRecordsOnline {
 
   // **
@@ -149,22 +149,26 @@ public class TestTGListRecordsOnline {
    * @throws IOException
    */
   @Test
-  @Ignore
   public void testListRecordsOAIDCAllPages() throws IOException {
 
     System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsOAIDCAllPages()");
 
-    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
-        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.NO_SET,
-        OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-        0, 100,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        OAIPMHUtilitiesOnline.NO_FROM,
-        OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
+    if (OAIPMHUtilitiesOnline.TEST_ALL_PAGES) {
 
-    System.out.println(OAIPMHUtilitiesOnline.OK);
+      OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+          OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+          OAIPMHUtilitiesOnline.NO_SET,
+          OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
+          0, 100,
+          OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+          OAIPMHUtilitiesOnline.NO_FROM,
+          OAIPMHUtilitiesOnline.NO_UNTIL,
+          OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
+
+      System.out.println(OAIPMHUtilitiesOnline.OK);
+    } else {
+      System.out.println("...skipping");
+    }
   }
 
   /**
-- 
GitLab