Skip to content
Snippets Groups Projects
Commit bdf5b164 authored by Robert Butora's avatar Robert Butora
Browse files

simplifies param parsing in output-filter (vlkb nneeds only Pos Band in output-formatting-filter)

parent 7fe049fd
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
......
......@@ -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();
......
......@@ -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, "
......
......@@ -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);
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);
......@@ -362,39 +358,39 @@ public class FormatResponseFilter implements Filter
// generate cutout/merge queryStrings
private String toQueryString(Coord coord)
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)
{
switch(pos.shape)
{
case CIRCLE:
sb.append("POS=" + coord.pos.circle.toString());
sb.append("POS=" + pos.circle.toString());
break;
case RANGE:
sb.append("POS=" + coord.pos.range.toString());
sb.append("POS=" + pos.range.toString());
break;
case POLYGON:
sb.append("POS=" + coord.pos.polygon.toString());
sb.append("POS=" + pos.polygon.toString());
break;
default:
LOGGER.info("Coord::toQueryString: unknown shape: " + coord.pos.shape.toString());
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();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment