Loading data-discovery/src/main/java/output/Dataset.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading data-discovery/src/main/java/output/XmlSerializer.java +26 −18 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import java.io.BufferedWriter; import java.util.List; import java.util.ArrayList; import vo.parameter.*; final class XmlSerializer { Loading Loading @@ -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) { Loading @@ -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>"); Loading @@ -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(); Loading data-discovery/src/main/java/search/DbPSearch.java +3 −3 Original line number Diff line number Diff line Loading @@ -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, " Loading data-discovery/src/main/java/webapi/FormatResponseFilter.java +42 −46 Original line number Diff line number Diff line Loading @@ -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"); Loading @@ -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); } Loading Loading @@ -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"); Loading @@ -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); } Loading @@ -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>(); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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(); } Loading Loading
data-discovery/src/main/java/output/Dataset.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading
data-discovery/src/main/java/output/XmlSerializer.java +26 −18 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import java.io.BufferedWriter; import java.util.List; import java.util.ArrayList; import vo.parameter.*; final class XmlSerializer { Loading Loading @@ -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) { Loading @@ -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>"); Loading @@ -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(); Loading
data-discovery/src/main/java/search/DbPSearch.java +3 −3 Original line number Diff line number Diff line Loading @@ -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, " Loading
data-discovery/src/main/java/webapi/FormatResponseFilter.java +42 −46 Original line number Diff line number Diff line Loading @@ -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"); Loading @@ -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); } Loading Loading @@ -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"); Loading @@ -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); } Loading @@ -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>(); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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(); } Loading