diff --git a/data-discovery/src/main/java/vlkb/output/XmlSerializer.java b/data-discovery/src/main/java/vlkb/output/XmlSerializer.java index 105e99f646f013be1d224360474cea1c4b4d52dc..1ff787aa52a5611e29b001ff9de751e4979b6072 100644 --- a/data-discovery/src/main/java/vlkb/output/XmlSerializer.java +++ b/data-discovery/src/main/java/vlkb/output/XmlSerializer.java @@ -10,6 +10,25 @@ public final class XmlSerializer private XmlSerializer() {} // disables instatiation + 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) + { + serialize(writer, subsurvey); + } + if(showDuration) + writer.println("<duration unit=\"msec\">" + (System.currentTimeMillis() - startTime_msec) + "</duration>"); + writer.println("</results>"); + } + + public static void serializeToLegacyResults(PrintWriter writer, String charEncoding, SearchOutputData searchOutputData, boolean showDuration, long startTime_msec) { diff --git a/data-discovery/src/main/java/vlkb/webapi/FormatResponseFilter.java b/data-discovery/src/main/java/vlkb/webapi/FormatResponseFilter.java index 49e1955df5971147606c33ef087833112cde0031..20e75edf3ff94cee73980aa9b0b8d1e281063968 100644 --- a/data-discovery/src/main/java/vlkb/webapi/FormatResponseFilter.java +++ b/data-discovery/src/main/java/vlkb/webapi/FormatResponseFilter.java @@ -111,11 +111,27 @@ public class FormatResponseFilter implements Filter settings.serviceUrls.mergeUrl(), dbSubsurveyArr); - response.setContentType("application/xml"); response.setCharacterEncoding(RESPONSE_ENCODING); + final String respFormat = settings.serviceUrls.responseFormat(); + LOGGER.info("responseFormat: " + respFormat); - boolean showDuration = true; - XmlSerializer.serializeToLegacyResults(responseWriter, RESPONSE_ENCODING, searchOutputData,showDuration,startTime_msec); + if(respFormat.equals("application/vlkb+xml")) // FIXME hsould be application/x-vlkb+xml -> x- is for eXperimental a.k.a. not registered + { + response.setContentType("application/xml"); + boolean showDuration = true; + XmlSerializer.serializeToLegacyResults(responseWriter, RESPONSE_ENCODING, searchOutputData,showDuration,startTime_msec); + } + else if(respFormat.equals("application/x-votable+xml")) + { + response.setContentType(respFormat); + boolean showDuration = false; + XmlSerializer.serializeToVoTable(responseWriter, RESPONSE_ENCODING, searchOutputData,showDuration,startTime_msec); + } + else + { + ; // FIXME throws wrong setting-file param: batter convert string to enum and throw 'unrecoginzed respFormat' then; + // here use switch with enums and switch-default: say error: 'unsupported respFromat' type + } responseWriter.close(); } diff --git a/data-discovery/src/main/java/vlkb/webapi/FormatResponseSettings.java b/data-discovery/src/main/java/vlkb/webapi/FormatResponseSettings.java index 9e22cb5ab853ac6301ec81390761bf0793e012be..b2979bd80fd2faeaa50f33f915b352344f9279f4 100644 --- a/data-discovery/src/main/java/vlkb/webapi/FormatResponseSettings.java +++ b/data-discovery/src/main/java/vlkb/webapi/FormatResponseSettings.java @@ -36,19 +36,22 @@ class FormatResponseSettings private String cutoutUrl; private String mergeUrl; private String surveysAbsPathname; + private String respFormat; public boolean cutoutUrlIsSet() { return (cutoutUrl != null) && cutoutUrl.trim().isEmpty(); } public boolean mergeUrlIsSet() { return (mergeUrl != null) && mergeUrl.trim().isEmpty(); } public boolean surveysAbsPathnameIsSet() { return (surveysAbsPathname != null) && surveysAbsPathname.trim().isEmpty(); } + public boolean responseFormatIsSet() { return (respFormat != null) && respFormat.trim().isEmpty(); } public String cutoutUrl() {return cutoutUrl;} public String mergeUrl() {return mergeUrl;} public String surveysAbsPathname() {return surveysAbsPathname;} + public String responseFormat() {return respFormat;} public String toString() { - return cutoutUrl + " " + mergeUrl + " " + surveysAbsPathname; + return cutoutUrl + " " + mergeUrl + " " + surveysAbsPathname + " " + respFormat; } } @@ -114,6 +117,7 @@ class FormatResponseSettings serviceUrls.cutoutUrl = properties.getProperty("cutout_url","").strip(); serviceUrls.mergeUrl = properties.getProperty("merge_url","").strip(); serviceUrls.surveysAbsPathname = properties.getProperty("surveys_metadata_abs_pathname","/srv/surveys/surveys_metadata.csv").strip(); + serviceUrls.respFormat = properties.getProperty("response_format","application/x-votable+xml").strip(); return serviceUrls; }