diff --git a/data-discovery/src/main/java/output/Dataset.java b/data-discovery/src/main/java/output/Dataset.java index f2ca86e5cf1e29c59a81c3d389aec716b540d3a3..0ed5590bad0e40a77358f5207c0a1754128c6a9e 100644 --- a/data-discovery/src/main/java/output/Dataset.java +++ b/data-discovery/src/main/java/output/Dataset.java @@ -69,7 +69,7 @@ class Dataset this.access = new Access(); this.access.accessFileUrl = null; this.access.accessCutoutUrl = null; - this.access.accessMosaicUrl = mergeUrlRoot + "?" + mergeQueryString + publisherDid; + this.access.accessMosaicUrl = mergeUrlRoot + "?" + mergeQueryString + "&ID=" + publisherDid; //this.vertices_deg = mergeVertices(datasetList, /*inputs.*/coord); } diff --git a/data-discovery/src/main/java/output/XmlSerializer.java b/data-discovery/src/main/java/output/XmlSerializer.java index 5a2013d53d46e78e680c8472bd6136e0e7fa312d..070d376944282361468116f30ad46cef43b35a84 100644 --- a/data-discovery/src/main/java/output/XmlSerializer.java +++ b/data-discovery/src/main/java/output/XmlSerializer.java @@ -12,6 +12,7 @@ import java.io.BufferedWriter; import java.util.List; import java.util.ArrayList; +import vo.parameter.*; final class XmlSerializer { @@ -255,7 +256,7 @@ final class XmlSerializer public static void serializeToLegacyResults( PrintWriter writer, String charEncoding, - AuthPolicy inputAuth, Coord inputCoord, SubsurveyId inputSubsurveyId, + AuthPolicy inputAuth, Pos pos, Band band, SubsurveyId inputSubsurveyId, SearchOutputData searchOutputData, boolean showDuration, long startTime_msec) { @@ -265,7 +266,8 @@ final class XmlSerializer writer.println("<inputs>"); if(inputSubsurveyId != null) writer.println(serialize(inputSubsurveyId)); - if(inputCoord != null) writer.println(serialize(inputCoord)); + if(pos != null) writer.println(serialize(pos)); + if(band != null) writer.println(serialize(band)); if(inputAuth != null) writer.println(serialize(inputAuth)); writer.println("</inputs>"); @@ -280,34 +282,40 @@ final class XmlSerializer writer.println("</results>"); } - private static String serialize(Coord coord) + private static String serialize(Pos pos) { StringBuilder xml = new StringBuilder(); - if(coord.pos != null) + if(pos != null) { - xml.append("<SkySystem>"+coord.pos.system+"</SkySystem>"); - switch(coord.pos.shape) + xml.append("<SkySystem>"+pos.system+"</SkySystem>"); + switch(pos.shape) { case CIRCLE: - xml.append("<l>" + String.valueOf(coord.pos.circle.lon) + "</l>"); - xml.append("<b>" + String.valueOf(coord.pos.circle.lat) + "</b>"); - xml.append("<r>" + String.valueOf(coord.pos.circle.radius)+"</r>"); break; + xml.append("<l>" + String.valueOf(pos.circle.lon) + "</l>"); + xml.append("<b>" + String.valueOf(pos.circle.lat) + "</b>"); + xml.append("<r>" + String.valueOf(pos.circle.radius)+"</r>"); + break; case RANGE: - xml.append("<l>" + String.valueOf((coord.pos.range.lon1 + coord.pos.range.lon2)/2.0) + "</l>"); - xml.append("<b>" + String.valueOf((coord.pos.range.lat1 + coord.pos.range.lat2)/2.0) + "</b>"); - xml.append("<dl>" + String.valueOf(coord.pos.range.lon2 - coord.pos.range.lon1) + "</dl>"); - xml.append("<db>" + String.valueOf(coord.pos.range.lat2 - coord.pos.range.lat1) + "</db>"); + xml.append("<l>" + String.valueOf((pos.range.lon1 + pos.range.lon2)/2.0) + "</l>"); + xml.append("<b>" + String.valueOf((pos.range.lat1 + pos.range.lat2)/2.0) + "</b>"); + xml.append("<dl>" + String.valueOf(pos.range.lon2 - pos.range.lon1) + "</dl>"); + xml.append("<db>" + String.valueOf(pos.range.lat2 - pos.range.lat1) + "</db>"); break; default: // POLYGON was not used in VLKB-legacy -> let it fail with error - xml.append("<shape> unknown shape: " + coord.pos.shape + " </shape>"); + xml.append("<shape> unknown shape: " + pos.shape + " </shape>"); } } + return xml.toString(); + } - if(coord.band != null) + private static String serialize(Band band) + { + StringBuilder xml = new StringBuilder(); + if(band != null) { - xml.append("<vl>" + String.valueOf(coord.band.getMin()) +"</vl>"); - xml.append("<vu>" + String.valueOf(coord.band.getMax()) +"</vu>"); - xml.append("<vtype>"+ coord.band.system +"</vtype>"); + xml.append("<vl>" + String.valueOf(band.getMin()) +"</vl>"); + xml.append("<vu>" + String.valueOf(band.getMax()) +"</vu>"); + xml.append("<vtype>"+ band.system +"</vtype>"); } return xml.toString(); diff --git a/data-discovery/src/main/java/search/DbPSearch.java b/data-discovery/src/main/java/search/DbPSearch.java index 6eeecbb42f00394f25ee885329b5f61b531a3139..d4d066d1f8a26b4f77fe45d78109eb858145041a 100644 --- a/data-discovery/src/main/java/search/DbPSearch.java +++ b/data-discovery/src/main/java/search/DbPSearch.java @@ -163,14 +163,14 @@ public class DbPSearch - public FormatResponseFilter.ObsCore[] queryOutputData(String[] pubdidArr, Coord coord) + public FormatResponseFilter.ObsCore[] queryOutputData(String[] pubdidArr, Pos pos) { LOGGER.info(""); String commaSepPubdids = String.join("\',\'", pubdidArr); - String inputRegion = toPgSphereSqlTypeString(coord.pos); - String dbRegion = toRegionColumnName(coord.pos.system); + String inputRegion = toPgSphereSqlTypeString(pos); + String dbRegion = toRegionColumnName(pos.system); String theQuery ="SELECT *," + inputRegion + " <@ " + dbRegion + " AS inputInsideDb, " diff --git a/data-discovery/src/main/java/webapi/FormatResponseFilter.java b/data-discovery/src/main/java/webapi/FormatResponseFilter.java index 89912a0adb551054238710d08c29aa1f07944082..d5adcd81a6737526d70e6e6468be1d08881dacc0 100644 --- a/data-discovery/src/main/java/webapi/FormatResponseFilter.java +++ b/data-discovery/src/main/java/webapi/FormatResponseFilter.java @@ -101,30 +101,26 @@ public class FormatResponseFilter implements Filter { PrintWriter responseWriter = ((HttpServletResponse)response).getWriter(); + // VLKB: reconstruct cutout/merge queryStrings and overlap code Map<String, String[]> params = request.getParameterMap(); -// Coord coord = new Coord(params); - SubsurveyId subsurveyId = new SubsurveyId(params); - // FIXME add invalid param excpetions -> params already parsed in servlet - - Coord coord = new Coord(); - coord.pos = Pos.parsePos(params, DEFAULT_SKY_SYSTEM); - coord.band = Band.parseBand(params, DEFAULT_SPEC_SYSTEM); - coord.time = Time.parseTime(params, DEFAULT_TIME_SYSTEM); - coord.pol = Pol.parsePol(params); + SubsurveyId subsurveyId = new SubsurveyId(params); + Pos pos = Pos.parsePos(params, DEFAULT_SKY_SYSTEM); + Band band = Band.parseBand(params, DEFAULT_SPEC_SYSTEM); + String queryStringBase = toQueryString(pos, band); ObsCore[] obsCoreArr = queryObsCore(pubdidArr, - coord); // VLKB: calc overlap-code for sky + pos); // VLKB: calc overlap-code for sky Dataset[] datasetArr = convert(obsCoreArr, - coord, // VLKB: calc overlap-code for velocity + band, // VLKB: calc overlap-code for velocity settings.serviceUrls.cutoutUrl(), - toQueryString(coord)); + queryStringBase); SearchOutputData searchOutputData = SearchOutputData.marshall(datasetArr, subsurveyId, dbSubsurveyArr, settings.serviceUrls.mergeUrl(), - toQueryString(coord)); + queryStringBase); String respFormat; String respFormatReq[] = params.get("RESPONSEFORMAT"); @@ -146,7 +142,7 @@ public class FormatResponseFilter implements Filter response.setContentType("application/xml"); boolean showDuration = true; XmlSerializer.serializeToLegacyResults(responseWriter, RESPONSE_ENCODING, - responseWrapper.auth, coord, subsurveyId, // <inputs/> + responseWrapper.auth, pos, band, subsurveyId, // <inputs/> searchOutputData, showDuration,startTime_msec); } @@ -241,7 +237,7 @@ public class FormatResponseFilter implements Filter - private FormatResponseFilter.ObsCore[] queryObsCore(String[] pubdidArr, Coord coord)//, String fitsRemotePath) + private FormatResponseFilter.ObsCore[] queryObsCore(String[] pubdidArr, Pos pos)//, String fitsRemotePath) { LOGGER.info("trace"); @@ -251,7 +247,7 @@ public class FormatResponseFilter implements Filter dbps = new DbPSearch(settings.dbConn); } - return dbps.queryOutputData(pubdidArr, coord); + return dbps.queryOutputData(pubdidArr, pos); //FormatResponseFilter.ObsCore[] obsCoreArr = dbps.queryOutputData(pubdidArr, coord); //return convert(obsCoreArr, coord, fitsRemotePath); } @@ -260,7 +256,7 @@ public class FormatResponseFilter implements Filter - private Dataset[] convert(FormatResponseFilter.ObsCore[] obsCoreArr, Coord coord, + private Dataset[] convert(FormatResponseFilter.ObsCore[] obsCoreArr, Band band, String cutoutUrlRoot, String cutoutQueryString) { List<Dataset> datasetList = new ArrayList<Dataset>(); @@ -273,13 +269,13 @@ public class FormatResponseFilter implements Filter dataset.subsurvey_id = obsCore.obs_collection; dataset.overlapCodeSky = convertToOverlapCodeSky(obsCore.inputInsideDb, obsCore.dbInsideInput); - dataset.overlapCodeVel = convertToOverlapCodeVel(coord,obsCore.em_valid,obsCore.em_min,obsCore.em_max); + dataset.overlapCodeVel = convertToOverlapCodeVel(band,obsCore.em_valid,obsCore.em_min,obsCore.em_max); dataset.overlapCode = convertToOverlapCode(dataset.overlapCodeSky, dataset.overlapCodeVel); dataset.dataType = obsCore.dataproduct_type; dataset.publisherDid = obsCore.obs_publisher_did; dataset.access.accessFileUrl = obsCore.access_url; - dataset.access.accessCutoutUrl = cutoutUrlRoot + "?" + cutoutQueryString + dataset.publisherDid; + dataset.access.accessCutoutUrl = cutoutUrlRoot + "?" + cutoutQueryString + "&ID=" + dataset.publisherDid; dataset.access.accessMosaicUrl = null; dataset.vertices_deg = convertToVertices(obsCore.vertices_str); @@ -300,20 +296,20 @@ public class FormatResponseFilter implements Filter } - private int convertToOverlapCodeVel(Coord coord, boolean v_valid, double v_min, double v_max) + private int convertToOverlapCodeVel(Band band, boolean v_valid, double v_min, double v_max) { - if((coord.band != null) && v_valid) + if((band != null) && v_valid) { - if(coord.band.system == Band.System.VELO_LSRK) + if(band.system == Band.System.VELO_LSRK) { // FIXME assert coord: vel_min <= vel_max // FIXME assert cube: v_min <= v_max - boolean dbInInp = (coord.band.getMin() <= v_min) && (v_min <= coord.band.getMax()) - && (coord.band.getMin() <= v_max) && (v_max <= coord.band.getMax()); + boolean dbInInp = (band.getMin() <= v_min) && (v_min <= band.getMax()) + && (band.getMin() <= v_max) && (v_max <= band.getMax()); - boolean inpInDb = (v_min <= coord.band.getMin()) && (coord.band.getMin() <= v_max) - && (v_min <= coord.band.getMax() ) && (coord.band.getMax() <= v_max); + boolean inpInDb = (v_min <= band.getMin()) && (band.getMin() <= v_max) + && (v_min <= band.getMax() ) && (band.getMax() <= v_max); return convertToOverlapCodeSky(inpInDb, dbInInp); @@ -361,40 +357,40 @@ public class FormatResponseFilter implements Filter - // generate cutout/merge queryStrings - private String toQueryString(Coord coord) + // generate cutout/merge queryStrings + private String toQueryString(Pos pos, Band band) { LOGGER.info("trace"); StringBuilder sb = new StringBuilder(); - //sb.append("POSSYS=" + coord.pos.system.toString()); - switch(coord.pos.shape) + if(pos!=null) { - case CIRCLE: - sb.append("POS=" + coord.pos.circle.toString()); - break; + switch(pos.shape) + { + case CIRCLE: + sb.append("POS=" + pos.circle.toString()); + break; - case RANGE: - sb.append("POS=" + coord.pos.range.toString()); - break; + case RANGE: + sb.append("POS=" + pos.range.toString()); + break; - case POLYGON: - sb.append("POS=" + coord.pos.polygon.toString()); - break; + case POLYGON: + sb.append("POS=" + pos.polygon.toString()); + break; - default: - LOGGER.info("Coord::toQueryString: unknown shape: " + coord.pos.shape.toString()); + default: + LOGGER.info("Coord::toQueryString: unknown shape: " + pos.shape.toString()); + } } + sb.append("&POSSYS=" + pos.system.toString()); - if(coord.band != null) + if(band != null) { - sb.append("&" + coord.band.toString()); - //sb.append("&BANDSYS=" + coord.band.system.toString() ); + sb.append("&" + band.toString()); } - sb.append("&ID="); // FIXME id-value will be added in FormatResponseFilter - return sb.toString(); }