From 07b21f4514a47ef54b7400629c0c8c6e7be066e0 Mon Sep 17 00:00:00 2001 From: Robert Butora <robert.butora@inaf.it> Date: Wed, 16 Oct 2024 15:03:23 +0300 Subject: [PATCH] appends service descriptor to VOTable (replaces file_/cutout_/merge_url columns) also removes subsurveyId (from request used only in legacy) --- data-discovery/src/main/java/common/Subsurvey.java | 6 ++++++ data-discovery/src/main/java/output/Dataset.java | 2 +- .../src/main/java/output/SearchOutputData.java | 10 +++++----- .../src/main/java/output/XmlSerializer.java | 13 ++++++++++++- .../src/main/java/webapi/FormatResponseFilter.java | 8 +++++--- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/data-discovery/src/main/java/common/Subsurvey.java b/data-discovery/src/main/java/common/Subsurvey.java index c925b0f..b8550a1 100644 --- a/data-discovery/src/main/java/common/Subsurvey.java +++ b/data-discovery/src/main/java/common/Subsurvey.java @@ -64,6 +64,12 @@ class Subsurvey try { + // FIXME parser not robust: + // * eats space-character also within the field: , hu ha , --> "huha" not "hu ha" + // * double quote used inside string not escaped: ,"blabla 25\" res", + // * last record (line) is missing if that line is not closed with EOL + // * UTF-8 or US-ASACII ? + // * else ? how to validate/verify correctness CSVReaderHeaderAware csvReader = new CSVReaderHeaderAware(new FileReader(csvFilename)); diff --git a/data-discovery/src/main/java/output/Dataset.java b/data-discovery/src/main/java/output/Dataset.java index 0ed5590..d3aec39 100644 --- a/data-discovery/src/main/java/output/Dataset.java +++ b/data-discovery/src/main/java/output/Dataset.java @@ -59,7 +59,7 @@ class Dataset } - public Dataset(List<Dataset> datasetList, SubsurveyId subsurveyId, String mergeUrlRoot, String mergeQueryString) + public Dataset(List<Dataset> datasetList, /*SubsurveyId subsurveyId,*/ String mergeUrlRoot, String mergeQueryString) { this.subsurvey_id = datasetList.get(0).subsurvey_id; // mergeabiity condition is more then 1 element in list this.overlapCode = 5; // 5: exact match --> legacy used 0 here FIXME 5 will not be correct on edges of Subsurvey coverage diff --git a/data-discovery/src/main/java/output/SearchOutputData.java b/data-discovery/src/main/java/output/SearchOutputData.java index 8c9cdb0..9d2ab54 100644 --- a/data-discovery/src/main/java/output/SearchOutputData.java +++ b/data-discovery/src/main/java/output/SearchOutputData.java @@ -13,7 +13,7 @@ class SearchOutputData public static SearchOutputData marshall(Dataset[] datasetArr, - SubsurveyId subsurveyId, Subsurvey[] dbSubsurveys, + /*SubsurveyId subsurveyId,*/ Subsurvey[] dbSubsurveys, String mergeUrlRoot, String mergeQueryString) { SearchOutputData sod = new SearchOutputData(); @@ -22,13 +22,13 @@ class SearchOutputData sod.versionString = "Search (pgSphere) version " + Version.asString; sod.datacubeCount = datasetArr.length; - sod.subsurveyArr = groupBySubsurveys(datasetArr, subsurveyId, dbSubsurveys, mergeUrlRoot, mergeQueryString); + sod.subsurveyArr = groupBySubsurveys(datasetArr, /*subsurveyId,*/ dbSubsurveys, mergeUrlRoot, mergeQueryString); return sod; } // assumes datasetArr is already ordered by subsurveys private static Subsurvey[] groupBySubsurveys(Dataset[] datasetArr, - SubsurveyId subsurveyId, Subsurvey[] dbSubsurveys, + /*SubsurveyId subsurveyId,*/ Subsurvey[] dbSubsurveys, String mergeUrlRoot, String mergeQueryString) { List<Subsurvey> subsurveyList = new ArrayList<Subsurvey>(); @@ -45,7 +45,7 @@ class SearchOutputData { if( false )//Dataset.areDatasetsMergeable(datasetList) ) { - Dataset mergedDataset = new Dataset(datasetList, subsurveyId, mergeUrlRoot, mergeQueryString); + Dataset mergedDataset = new Dataset(datasetList, /*subsurveyId,*/ mergeUrlRoot, mergeQueryString); datasetList.add(mergedDataset); } @@ -64,7 +64,7 @@ class SearchOutputData if( false )//Dataset.areDatasetsMergeable(datasetList) ) { - Dataset mergedDataset = new Dataset(datasetList, subsurveyId, mergeUrlRoot, mergeQueryString); + Dataset mergedDataset = new Dataset(datasetList, /*subsurveyId,*/ mergeUrlRoot, mergeQueryString); datasetList.add(mergedDataset); } diff --git a/data-discovery/src/main/java/output/XmlSerializer.java b/data-discovery/src/main/java/output/XmlSerializer.java index 96d8410..b0f6928 100644 --- a/data-discovery/src/main/java/output/XmlSerializer.java +++ b/data-discovery/src/main/java/output/XmlSerializer.java @@ -23,6 +23,7 @@ final class XmlSerializer public static void serializeToVoTable( PrintWriter writer, String charEncoding, SearchOutputData searchOutputData, + String cutoutUrl, String mergeUrl, boolean showDuration, long startTime_msec) throws IOException { StarTable dstable = makeSearchResultsTable( searchOutputData.subsurveyArr ); @@ -39,12 +40,22 @@ final class XmlSerializer out.write("<?xml-stylesheet type='text/xsl' href='VOTable2XHTML.xsl'?>"); out.write( "<VOTABLE version='1.1'>" ); - out.write( "<RESOURCE>" ); + out.write( "<RESOURCE type=\"results\">" ); out.write( "<DESCRIPTION> " + searchOutputData.versionString + " </DESCRIPTION>" ); VOSerializer.makeSerializer( DataFormat.TABLEDATA, dstable ).writeInlineTableElement( out ); out.write( "</RESOURCE>" ); + + out.write( "<RESOURCE type=\"meta\" utype=\"adhoc:service\" name=\"CutoutService\" >" ); + out.write( "<DESCRIPTION> VLKB cutout service </DESCRIPTION>"); + out.write( "<PARAM name=\"standardID\" datatype=\"char\" arraysize=\"*\" value=\"ivo://ivoa.net/std/SODA#sync-1.0\" />"); + out.write( "<PARAM name=\"accessURL\" datatype=\"char\" arraysize=\"*\" value=\"" + cutoutUrl + "\" />"); + out.write( "<GROUP name=\"inputParams\">"); + out.write( "<PARAM name=\"ID\" datatype=\"char\" arraysize=\"*\" value=\"\" ref=\"primaryID\" />"); // FIXME results table obs_publisher_did FIELD must have attrib: ID="primaryID" + out.write( "</GROUP>"); + out.write( "</RESOURCE>" ); + out.write( "</VOTABLE>" ); out.flush(); } diff --git a/data-discovery/src/main/java/webapi/FormatResponseFilter.java b/data-discovery/src/main/java/webapi/FormatResponseFilter.java index c8e745c..7c01c84 100644 --- a/data-discovery/src/main/java/webapi/FormatResponseFilter.java +++ b/data-discovery/src/main/java/webapi/FormatResponseFilter.java @@ -103,7 +103,7 @@ public class FormatResponseFilter implements Filter // VLKB: reconstruct cutout/merge queryStrings and overlap code Map<String, String[]> params = request.getParameterMap(); - SubsurveyId subsurveyId = new SubsurveyId(params); + SubsurveyId subsurveyId = new SubsurveyId(params); // for legacy-only Input Pos pos = Pos.parsePos(params, DEFAULT_SKY_SYSTEM); Band band = Band.parseBand(params, DEFAULT_SPEC_SYSTEM); String queryStringBase = toQueryString(pos, band); @@ -117,7 +117,7 @@ public class FormatResponseFilter implements Filter queryStringBase); SearchOutputData searchOutputData = SearchOutputData.marshall(datasetArr, - subsurveyId, + /*subsurveyId,*/ dbSubsurveyArr, settings.serviceUrls.mergeUrl(), queryStringBase); @@ -159,7 +159,9 @@ public class FormatResponseFilter implements Filter searchOutputData,showDuration,startTime_msec); else XmlSerializer.serializeToVoTable(responseWriter, RESPONSE_ENCODING, - searchOutputData,showDuration,startTime_msec); + searchOutputData, + settings.serviceUrls.cutoutUrl(),settings.serviceUrls.mergeUrl(), + showDuration,startTime_msec); } else -- GitLab