From ed302e3abbb0657377f40a2555b383fd0c97aa16 Mon Sep 17 00:00:00 2001 From: Robert Butora <robert.butora@gmail.com> Date: Sat, 23 Mar 2024 11:23:16 -0400 Subject: [PATCH] response: implements preliminary VOTable response.xml --- .../main/java/vlkb/output/XmlSerializer.java | 93 ++++++++++++++++--- 1 file changed, 82 insertions(+), 11 deletions(-) diff --git a/data-discovery/src/main/java/vlkb/output/XmlSerializer.java b/data-discovery/src/main/java/vlkb/output/XmlSerializer.java index 1ff787a..dfc95ec 100644 --- a/data-discovery/src/main/java/vlkb/output/XmlSerializer.java +++ b/data-discovery/src/main/java/vlkb/output/XmlSerializer.java @@ -2,6 +2,14 @@ //import java.util.logging.Logger; import java.io.PrintWriter; +// VOTable +import uk.ac.starlink.table.*;// StarTable needed +import uk.ac.starlink.votable.*;// Writer needed + +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.BufferedWriter; + public final class XmlSerializer @@ -13,21 +21,84 @@ public final class XmlSerializer public static void serializeToVoTable(PrintWriter writer, String charEncoding, SearchOutputData searchOutputData, boolean showDuration, long startTime_msec) { - writer.println("<?xml version=\"1.0\" encoding=\"" + charEncoding + "\" standalone=\"yes\"?>"); - writer.println("<results>"); - writer.println("<description> TBD: VOTable " + searchOutputData.description + " </description>"); - serialize(writer, searchOutputData.inputs); - writer.println("<msg> " + searchOutputData.versionString + " </msg>"); - writer.println("<DatacubeCount> " + searchOutputData.datacubeCount + " </DatacubeCount>"); - for(Subsurvey subsurvey : searchOutputData.subsurveyArr) + // writer.println("<msg> " + searchOutputData.versionString + " </msg>"); + // writer.println("<DatacubeCount> " + searchOutputData.datacubeCount + " </DatacubeCount>"); + + StarTable dstable = makeSearchResultsTable( searchOutputData.subsurveyArr ); + StarTable[] tables = {dstable}; + try { - serialize(writer, subsurvey); + writeTables(writer, tables); } - if(showDuration) - writer.println("<duration unit=\"msec\">" + (System.currentTimeMillis() - startTime_msec) + "</duration>"); - writer.println("</results>"); + catch(IOException ex) + { + ;// FIXME System.out.println( ex.getMessage() ); + } + + } + + private static void writeTables(PrintWriter writer, StarTable[] tables ) throws IOException + { + BufferedWriter out = new BufferedWriter( writer /*new OutputStreamWriter( System.out )*/ ); + + out.write( "<VOTABLE version='1.1'>\n" ); + out.write( "<RESOURCE>\n" ); + out.write( "<DESCRIPTION>Some tables</DESCRIPTION>\n" ); + for ( int i = 0; i < tables.length; i++ ) { + VOSerializer.makeSerializer( DataFormat.TABLEDATA, tables[ i ] ) + .writeInlineTableElement( out ); + } + out.write( "</RESOURCE>\n" ); + out.write( "</VOTABLE>\n" ); + out.flush(); + } + + private static StarTable makeSearchResultsTable(Subsurvey[] ssurv) + { + ColumnInfo[] colInfos = new ColumnInfo[ 5 + 2*4 ]; + + colInfos[ 0 ] = new ColumnInfo( "overlap", Integer.class, "Overlap Code" ); + colInfos[ 1 ] = new ColumnInfo( "overlapSky", Integer.class, "Overlap Code for Sky axes" ); + colInfos[ 2 ] = new ColumnInfo( "overlapSpec", Integer.class, "Overlap Code for Spectral axis" ); + + colInfos[ 3 ] = new ColumnInfo( "dataType", String.class, "Data Type (image|cube)" ); + colInfos[ 4 ] = new ColumnInfo( "pubdid", String.class, "PublisherDid" ); + + colInfos[ 5 ] = new ColumnInfo( "P1lon", Double.class, "longitude" ); + colInfos[ 6 ] = new ColumnInfo( "P1lat", Double.class, "latitude" ); + colInfos[ 7 ] = new ColumnInfo( "P2lon", Double.class, "longitude" ); + colInfos[ 8 ] = new ColumnInfo( "P2lat", Double.class, "latitude" ); + colInfos[ 9 ] = new ColumnInfo( "P3lon", Double.class, "longitude" ); + colInfos[ 10 ] = new ColumnInfo( "P3lat", Double.class, "latitude" ); + colInfos[ 11 ] = new ColumnInfo( "P4lon", Double.class, "longitude" ); + colInfos[ 12 ] = new ColumnInfo( "P4lat", Double.class, "latitude" ); + + RowListStarTable astro = new RowListStarTable( colInfos ); + + for(Subsurvey subsurvey : ssurv) + { + for(Dataset dataset : subsurvey.datasetArr) + { + astro.addRow( new Object[] + { + new Integer( dataset.overlapCode ), + new Integer( dataset.overlapCodeSky ), + new Integer( dataset.overlapCodeVel ), + dataset.dataType, + dataset.publisherDid, + + new Double(dataset.vertices_deg.lon[0]), new Double(dataset.vertices_deg.lat[0]), + new Double(dataset.vertices_deg.lon[1]), new Double(dataset.vertices_deg.lat[1]), + new Double(dataset.vertices_deg.lon[2]), new Double(dataset.vertices_deg.lat[2]), + new Double(dataset.vertices_deg.lon[3]), new Double(dataset.vertices_deg.lat[3]), + }); + } + } + + return astro; } + // legacy public static void serializeToLegacyResults(PrintWriter writer, String charEncoding, SearchOutputData searchOutputData, boolean showDuration, long startTime_msec) -- GitLab