diff --git a/data-discovery/src/main/java/common/Subsurvey.java b/data-discovery/src/main/java/common/Subsurvey.java index c925b0fb87da78013fdf18d14ca8287d6894831b..b8550a1c64c8b08a473dfecf82f599bbe26fdd9a 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 0ed5590bad0e40a77358f5207c0a1754128c6a9e..d3aec3953af9c1044770ad6d64bc44d9e197e2cc 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 8c9cdb08270ef74712b6e8d6ba1bc25d85b743a3..9d2ab54505564070c147403d344ac8dedaa7c193 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 96d8410511d5ea1d0d08b4b13d9699fdd5ff1dc7..b0f692841037c48e9df6d3b7bf51f3d2bb388165 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 c8e745c7e4f27d34eba8ad4ffbca49588341a4b2..7c01c846a31bea0139d17a1910ad4d15acd0d42c 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