From 1f80727a72e470da08356692d2b90ce41ed5eab0 Mon Sep 17 00:00:00 2001
From: Robert Butora <robert.butora@inaf.it>
Date: Sun, 28 Apr 2024 10:33:01 +0200
Subject: [PATCH] replaces DataLink -> MCutResult in doMCutout

---
 .../main/java/common/output/MCutResult.java   | 20 +++++++----
 .../src/main/java/cutout/Datasets.java        |  2 +-
 .../src/main/java/cutout/DatasetsImpl.java    |  2 +-
 .../src/main/java/cutout/json/JdlMCutout.java | 30 ++++++++--------
 .../main/java/cutout/json/JsonDecoder.java    |  4 +--
 .../src/main/java/webapi/ServletMCutout.java  |  3 +-
 .../src/main/java/webapi/UWSMCutoutWork.java  |  3 +-
 .../src/main/java/webapi/output/DataLink.java | 35 ++++++++++++++++---
 8 files changed, 67 insertions(+), 32 deletions(-)

diff --git a/data-access/servlet/src/main/java/common/output/MCutResult.java b/data-access/servlet/src/main/java/common/output/MCutResult.java
index 5288da2..b65a669 100644
--- a/data-access/servlet/src/main/java/common/output/MCutResult.java
+++ b/data-access/servlet/src/main/java/common/output/MCutResult.java
@@ -1,12 +1,20 @@
 
 
-
 class MCutResult
 {
-   public enum ContentType {FILENAME, BAD_REQUEST, SERVICE_ERROR};
-   public Inputs inputs;
-   public int index;
-   public ContentType contentType;
-   public String content;
+
+   class Cut
+   {
+      public enum ContentType {FILENAME, BAD_REQUEST, SERVICE_ERROR};
+      public Inputs inputs;
+      public int index;
+      public ContentType contentType;
+      public String content;
+   }
+
+
+   public String fileName;
+   public long fileSize;
+   Cut[] cutResArr;
 }
 
diff --git a/data-access/servlet/src/main/java/cutout/Datasets.java b/data-access/servlet/src/main/java/cutout/Datasets.java
index c07bdb9..684ba20 100644
--- a/data-access/servlet/src/main/java/cutout/Datasets.java
+++ b/data-access/servlet/src/main/java/cutout/Datasets.java
@@ -16,7 +16,7 @@ public interface Datasets
       throws FileNotFoundException, IOException;
 
 
-   public DataLink doMCutout(String jdlJson)
+   public MCutResult doMCutout(String jdlJson)
       throws IOException;
 
 }
diff --git a/data-access/servlet/src/main/java/cutout/DatasetsImpl.java b/data-access/servlet/src/main/java/cutout/DatasetsImpl.java
index 7a54906..b64e361 100644
--- a/data-access/servlet/src/main/java/cutout/DatasetsImpl.java
+++ b/data-access/servlet/src/main/java/cutout/DatasetsImpl.java
@@ -67,7 +67,7 @@ class DatasetsImpl implements Datasets
 
 
 
-   public DataLink doMCutout(String jdlJson)
+   public MCutResult doMCutout(String jdlJson)
          throws IOException
       {
          LOGGER.info("trace");
diff --git a/data-access/servlet/src/main/java/cutout/json/JdlMCutout.java b/data-access/servlet/src/main/java/cutout/json/JdlMCutout.java
index c076dd1..5791ca4 100644
--- a/data-access/servlet/src/main/java/cutout/json/JdlMCutout.java
+++ b/data-access/servlet/src/main/java/cutout/json/JdlMCutout.java
@@ -101,11 +101,11 @@ public class JdlMCutout
 
 
 
-   public static DataLink responseFromMCutoutJson(String response)
+   public static MCutResult responseFromMCutoutJson(String response)
       // throws ParseException
    {   
-      DataLink dlk = new DataLink();
 
+      MCutResult cuts = new MCutResult();
       try {
          JSONParser parser = new JSONParser();
          Object jsonObj = parser.parse(response);
@@ -132,7 +132,7 @@ public class JdlMCutout
 
             JSONArray jsonArray = (JSONArray)jsonObject.get("responses");
 
-            MCutResult[] mcutResArr = new MCutResult[jsonArray.size()];
+            MCutResult.Cut[] cutResArr = new MCutResult.Cut[jsonArray.size()];
 
             int i = 0;
             @SuppressWarnings("unchecked")
@@ -141,29 +141,29 @@ public class JdlMCutout
             {
                JSONObject jObj = itr.next();
 
-               mcutResArr[i].inputs  = (Inputs)jObj.get("input");
+               cutResArr[i].inputs  = (Inputs)jObj.get("input");
                String ctype = (String)jObj.get("type");
                if(ctype.equals("FILENAME"))
-                  mcutResArr[i].contentType = MCutResult.ContentType.FILENAME;
+                  cutResArr[i].contentType = MCutResult.Cut.ContentType.FILENAME;
                else if(ctype.equals("BAD_REQUEST"))
-                  mcutResArr[i].contentType = MCutResult.ContentType.BAD_REQUEST;
+                  cutResArr[i].contentType = MCutResult.Cut.ContentType.BAD_REQUEST;
                else if(ctype.equals("SERVICE_ERROR"))
-                  mcutResArr[i].contentType = MCutResult.ContentType.SERVICE_ERROR;
-               mcutResArr[i].content = (String)jObj.get("content");
+                  cutResArr[i].contentType = MCutResult.Cut.ContentType.SERVICE_ERROR;
+               cutResArr[i].content = (String)jObj.get("content");
                i++;
             }
 
-            dlk.contentLength = fileSize;
-            dlk.accessUrl     = fileName;
-            dlk.mcutResultArr = mcutResArr;
+            cuts.fileSize = fileSize;
+            cuts.fileName = fileName;
+            cuts.cutResArr = cutResArr;
          }
-      }   
+      }
       catch  (ParseException e)
-      {   
+      {
          e.printStackTrace();
          throw new IllegalStateException("Internal system error.");
-      }   
-      return dlk;
+      }
+      return cuts;
    }
 
 
diff --git a/data-access/servlet/src/main/java/cutout/json/JsonDecoder.java b/data-access/servlet/src/main/java/cutout/json/JsonDecoder.java
index a3b9ffc..3ac4b2b 100644
--- a/data-access/servlet/src/main/java/cutout/json/JsonDecoder.java
+++ b/data-access/servlet/src/main/java/cutout/json/JsonDecoder.java
@@ -14,13 +14,13 @@ import org.json.simple.parser.ParseException;
 //
 // 1. exception (decoded inside 2 3)
 //
-// 2. response from cutout:   struct cutout_res_s  --> DataLink
+// 2. response from cutout:   struct cutout_res_s  --> CutResult
 //    .filesize
 //    .filename
 //    .nullval_count : {fill_ratio null_count total_count}
 //
 // NOTE: MCutout moved to -> dacc/JdlMCutout.java
-// 3. response from mcutout:  struct mcutout_res_s --> DataLink
+// 3. response from mcutout:  struct mcutout_res_s --> MCutResult
 //    .filesize
 //    .tgz_filename
 //    .cut_resp_s[] : {cut_param_s content_type content}
diff --git a/data-access/servlet/src/main/java/webapi/ServletMCutout.java b/data-access/servlet/src/main/java/webapi/ServletMCutout.java
index fd88d8d..db6133e 100644
--- a/data-access/servlet/src/main/java/webapi/ServletMCutout.java
+++ b/data-access/servlet/src/main/java/webapi/ServletMCutout.java
@@ -96,7 +96,8 @@ public class ServletMCutout extends javax.servlet.http.HttpServlet
 
          OutputStream respOutputStream = response.getOutputStream();
 
-         DataLink dlk = datasets.doMCutout(reqJsonString);
+         MCutResult mCutRes = datasets.doMCutout(reqJsonString);
+         DataLink dlk = new DataLink(mCutRes);
 
          final String contentType = "text/xml"; // FIXME
          final String respEncoding = "utf-8"; // FIXME
diff --git a/data-access/servlet/src/main/java/webapi/UWSMCutoutWork.java b/data-access/servlet/src/main/java/webapi/UWSMCutoutWork.java
index 259cecb..393b81f 100644
--- a/data-access/servlet/src/main/java/webapi/UWSMCutoutWork.java
+++ b/data-access/servlet/src/main/java/webapi/UWSMCutoutWork.java
@@ -83,7 +83,8 @@ public class UWSMCutoutWork extends JobThread
 
             /* SODA -> Implementation */
 
-            DataLink dlk = datasets.doMCutout(reqJsonString);
+            MCutResult mCutResults = datasets.doMCutout(reqJsonString);
+            DataLink dlk = new DataLink(mCutResults);
 
             /* Implement -> SODA */
 
diff --git a/data-access/servlet/src/main/java/webapi/output/DataLink.java b/data-access/servlet/src/main/java/webapi/output/DataLink.java
index 321379d..7c40950 100644
--- a/data-access/servlet/src/main/java/webapi/output/DataLink.java
+++ b/data-access/servlet/src/main/java/webapi/output/DataLink.java
@@ -11,23 +11,23 @@ class DataLink
    /* DataLink fields */
 
    String id;
-   String accessUrl;
+   String accessUrl;   // MX
    String serviceDef;
    String errorMessage;
-   String description;
+   String description;  // X
    String semantics;
    String contentType;
-   long  contentLength;
+   long  contentLength;  // MX
 
    /* legacy-VLKB fields */
 
    Inputs inputs;
    String versionString;
    String cut;
-   String absCutPathname;
+   String absCutPathname; // ServeltCutout uses
    int datacubeCount;
    NullValueCount nullVals;
-   MCutResult[] mcutResultArr;
+   MCutResult.Cut[] mcutResultArr;
 
 
    public DataLink()
@@ -62,6 +62,31 @@ class DataLink
       this.mcutResultArr  = null;
    }
 
+
+   public DataLink(MCutResult cutResult)
+   {
+      this.nullVals = new NullValueCount();
+
+      this.id            = "_PIXEL_BOUNDS"; 
+      this.accessUrl     = cutResult.fileName; // FIXME filename ->> remoteUrl
+      this.serviceDef    = null;
+      this.errorMessage  = null;
+      this.description   = "cutout_from ID";
+      this.semantics     = "FIXME find in IVOA docs...";
+      this.contentType   = "application/fits"; 
+      this.contentLength = cutResult.fileSize;
+
+      // VLKB-extension to DataLink:
+      this.inputs         = null;
+      this.versionString  = Version.asString;
+      this.cut            = null;
+      this.absCutPathname = cutResult.fileName;
+      this.datacubeCount  = 1;
+      this.nullVals       = null;
+      this.mcutResultArr  = cutResult.cutResArr;
+   }
+
+
    public String convertLocalPathnameToRemoteUrl(String localPathname, String FITScutpath, String FITSRemoteUrlCutouts)
    {
       String filename = localPathname.replaceAll(FITScutpath + "/", "");
-- 
GitLab