Loading data-discovery/src/main/java/search/DbPSearch.java +27 −27 Original line number Diff line number Diff line Loading @@ -83,23 +83,23 @@ public class DbPSearch public String[] queryOverlapingPubdid(Coord coord) public String[] queryOverlapingPubdid(QueryArgs qArgs) throws Exception { LOGGER.fine("trace"); String inputRegion = toPgSphereSqlTypeString(coord.pos); String dbRegion = toRegionColumnName(coord.pos.system); String inputRegion = toPgSphereSqlTypeString(qArgs.pos); String dbRegion = toRegionColumnName(qArgs.pos.system); String theQuery = "SELECT obs_publisher_did FROM obscore WHERE ("+inputRegion+" && " + dbRegion + ")"; boolean vel_valid = (coord.band != null) && (coord.band.system != Band.System.NONE); boolean vel_valid = (qArgs.band != null) && (qArgs.band.system != Band.System.NONE); if(vel_valid) { String prefix = toSpecColumnNamePrefix(coord.band.system); String prefix = toSpecColumnNamePrefix(qArgs.band.system); String vel_no_overlap = "((" + prefix + "_min > " + Double.toString(coord.band.getMax()) + ") OR (" + prefix + "_max < " + Double.toString(coord.band.getMin()) + "))"; = "((" + prefix + "_min > " + Double.toString(qArgs.band.getMax()) + ") OR (" + prefix + "_max < " + Double.toString(qArgs.band.getMin()) + "))"; theQuery += " AND ( ("+prefix+"_min is null) OR ("+prefix+"_max is null) OR (NOT " + vel_no_overlap + "))"; /* NOTE '... OR (em_min is null)' statement causes to include 2D datasets if they overlap in sky Loading @@ -107,34 +107,34 @@ public class DbPSearch */ } if(coord.collection != null) if(qArgs.collection != null) { String addColl = ""; if(coord.collection.length() > 0) addColl += "(obs_collection LIKE '%" + coord.collection + "%')"; if(qArgs.collection.length() > 0) addColl += "(obs_collection LIKE '%" + qArgs.collection + "%')"; if(addColl.length() > 0) theQuery += " AND (" + addColl + ")"; } theQuery += appendIntervalConstraint(coord.fov, "s_fov"); theQuery += appendIntervalConstraint(coord.spatres, "s_resolution"); theQuery += appendIntervalConstraint(coord.specrp, "em_res_power"); theQuery += appendIntervalConstraint(coord.exptime, "t_exptime"); theQuery += appendIntervalConstraint(coord.timeres, "t_resolution"); theQuery += appendIntervalConstraint(qArgs.fov, "s_fov"); theQuery += appendIntervalConstraint(qArgs.spatres, "s_resolution"); theQuery += appendIntervalConstraint(qArgs.specrp, "em_res_power"); theQuery += appendIntervalConstraint(qArgs.exptime, "t_exptime"); theQuery += appendIntervalConstraint(qArgs.timeres, "t_resolution"); theQuery += appendStringMatchConstraint(coord.id, "obs_publisher_did"); theQuery += appendStringMatchConstraint(coord.facility, "facility_name"); theQuery += appendStringMatchConstraint(coord.instrument, "instrument_name"); theQuery += appendStringMatchConstraint(coord.dptype, "dataproduct_type"); theQuery += appendStringMatchConstraint(qArgs.id, "obs_publisher_did"); theQuery += appendStringMatchConstraint(qArgs.facility, "facility_name"); theQuery += appendStringMatchConstraint(qArgs.instrument, "instrument_name"); theQuery += appendStringMatchConstraint(qArgs.dptype, "dataproduct_type"); theQuery += appendStringMatchConstraint(coord.target, "target_name"); theQuery += appendStringMatchConstraint(coord.format, "access_format"); theQuery += appendStringMatchConstraint(qArgs.target, "target_name"); theQuery += appendStringMatchConstraint(qArgs.format, "access_format"); if(coord.calib != null) theQuery += " AND (" + coord.calib + " = calib_level)"; if(qArgs.calib != null) theQuery += " AND (" + qArgs.calib + " = calib_level)"; if(coord.maxrec != null) theQuery += " LIMIT " + coord.maxrec; if(qArgs.maxrec != null) theQuery += " LIMIT " + qArgs.maxrec; //theQuery += " ORDER BY obs_collection"; Loading Loading @@ -325,7 +325,7 @@ public class DbPSearch { if(band.system == Band.System.VELO_LSRK) { // FIXME assert coord: vel_min <= vel_max // FIXME assert qArgs: vel_min <= vel_max // FIXME assert cube: v_min <= v_max boolean dbInInp = (band.getMin() <= v_min) && (v_min <= band.getMax()) Loading Loading @@ -460,7 +460,7 @@ public class DbPSearch break; default: throw new IllegalArgumentException("Coord::shape was: " + pos.shape.toString() throw new IllegalArgumentException("Pos::shape was: " + pos.shape.toString() + " but valid is CIRCLE or RANGE or POLYGON"); } Loading data-discovery/src/main/java/common/Coord.java→data-discovery/src/main/java/search/QueryArgs.java +1 −1 Original line number Diff line number Diff line import vo.parameter.*; class Coord class QueryArgs { Pos pos; Band band; Loading data-discovery/src/main/java/webapi/SearchServlet.java +24 −24 Original line number Diff line number Diff line Loading @@ -44,37 +44,37 @@ public class SearchServlet extends javax.servlet.http.HttpServlet { Map<String, String[]> params = request.getParameterMap(); 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); QueryArgs qArgs = new QueryArgs(); qArgs.pos = Pos.parsePos(params, DEFAULT_SKY_SYSTEM); qArgs.band = Band.parseBand(params, DEFAULT_SPEC_SYSTEM); qArgs.time = Time.parseTime(params, DEFAULT_TIME_SYSTEM); qArgs.pol = Pol.parsePol(params); coord.fov = Interval.parseInterval(params, "FOV"); coord.spatres = Interval.parseInterval(params, "SPATRES"); coord.specrp = Interval.parseInterval(params, "SPECRP"); coord.exptime = Interval.parseInterval(params, "EXPTIME"); coord.timeres = Interval.parseInterval(params, "TIMERES"); qArgs.fov = Interval.parseInterval(params, "FOV"); qArgs.spatres = Interval.parseInterval(params, "SPATRES"); qArgs.specrp = Interval.parseInterval(params, "SPECRP"); qArgs.exptime = Interval.parseInterval(params, "EXPTIME"); qArgs.timeres = Interval.parseInterval(params, "TIMERES"); coord.id = SingleStringParam.parseSingleStringParam(params, "ID"); qArgs.id = SingleStringParam.parseSingleStringParam(params, "ID"); coord.collection = SingleStringParam.parseSingleStringParam(params, "COLLECTION"); coord.facility = SingleStringParam.parseSingleStringParam(params, "FACILITY"); coord.instrument = SingleStringParam.parseSingleStringParam(params, "INSTRUMENT"); coord.dptype = SingleStringParam.parseSingleStringParam(params, "DPTYPE"); qArgs.collection = SingleStringParam.parseSingleStringParam(params, "COLLECTION"); qArgs.facility = SingleStringParam.parseSingleStringParam(params, "FACILITY"); qArgs.instrument = SingleStringParam.parseSingleStringParam(params, "INSTRUMENT"); qArgs.dptype = SingleStringParam.parseSingleStringParam(params, "DPTYPE"); coord.target = SingleStringParam.parseSingleStringParam(params, "TARGET"); coord.format = SingleStringParam.parseSingleStringParam(params, "FORMAT"); qArgs.target = SingleStringParam.parseSingleStringParam(params, "TARGET"); qArgs.format = SingleStringParam.parseSingleStringParam(params, "FORMAT"); String str = SingleStringParam.parseSingleStringParam(params, "CALIB"); coord.calib = (str == null) ? null : Integer.parseInt(str); if((coord.calib != null) && ((coord.calib < 0) || (coord.calib > 4))) throw new IllegalArgumentException("CALIB out of range: " + coord.calib + " but allowed is 0..4"); qArgs.calib = (str == null) ? null : Integer.parseInt(str); if((qArgs.calib != null) && ((qArgs.calib < 0) || (qArgs.calib > 4))) throw new IllegalArgumentException("CALIB out of range: " + qArgs.calib + " but allowed is 0..4"); str = SingleStringParam.parseSingleStringParam(params, "MAXREC"); coord.maxrec = (str == null) ? null : Integer.parseInt(str); if((coord.maxrec != null) && (coord.maxrec < 0)) throw new IllegalArgumentException("MAXREC must not be negative: " + coord.maxrec); qArgs.maxrec = (str == null) ? null : Integer.parseInt(str); if((qArgs.maxrec != null) && (qArgs.maxrec < 0)) throw new IllegalArgumentException("MAXREC must not be negative: " + qArgs.maxrec); /* query Obscore table */ Loading @@ -83,7 +83,7 @@ public class SearchServlet extends javax.servlet.http.HttpServlet { dbps = new DbPSearch(settings.dbConn); } String[] pubdidArr = dbps.queryOverlapingPubdid(coord); String[] pubdidArr = dbps.queryOverlapingPubdid(qArgs); LOGGER.info("Found " + pubdidArr.length + " records"); Loading Loading
data-discovery/src/main/java/search/DbPSearch.java +27 −27 Original line number Diff line number Diff line Loading @@ -83,23 +83,23 @@ public class DbPSearch public String[] queryOverlapingPubdid(Coord coord) public String[] queryOverlapingPubdid(QueryArgs qArgs) throws Exception { LOGGER.fine("trace"); String inputRegion = toPgSphereSqlTypeString(coord.pos); String dbRegion = toRegionColumnName(coord.pos.system); String inputRegion = toPgSphereSqlTypeString(qArgs.pos); String dbRegion = toRegionColumnName(qArgs.pos.system); String theQuery = "SELECT obs_publisher_did FROM obscore WHERE ("+inputRegion+" && " + dbRegion + ")"; boolean vel_valid = (coord.band != null) && (coord.band.system != Band.System.NONE); boolean vel_valid = (qArgs.band != null) && (qArgs.band.system != Band.System.NONE); if(vel_valid) { String prefix = toSpecColumnNamePrefix(coord.band.system); String prefix = toSpecColumnNamePrefix(qArgs.band.system); String vel_no_overlap = "((" + prefix + "_min > " + Double.toString(coord.band.getMax()) + ") OR (" + prefix + "_max < " + Double.toString(coord.band.getMin()) + "))"; = "((" + prefix + "_min > " + Double.toString(qArgs.band.getMax()) + ") OR (" + prefix + "_max < " + Double.toString(qArgs.band.getMin()) + "))"; theQuery += " AND ( ("+prefix+"_min is null) OR ("+prefix+"_max is null) OR (NOT " + vel_no_overlap + "))"; /* NOTE '... OR (em_min is null)' statement causes to include 2D datasets if they overlap in sky Loading @@ -107,34 +107,34 @@ public class DbPSearch */ } if(coord.collection != null) if(qArgs.collection != null) { String addColl = ""; if(coord.collection.length() > 0) addColl += "(obs_collection LIKE '%" + coord.collection + "%')"; if(qArgs.collection.length() > 0) addColl += "(obs_collection LIKE '%" + qArgs.collection + "%')"; if(addColl.length() > 0) theQuery += " AND (" + addColl + ")"; } theQuery += appendIntervalConstraint(coord.fov, "s_fov"); theQuery += appendIntervalConstraint(coord.spatres, "s_resolution"); theQuery += appendIntervalConstraint(coord.specrp, "em_res_power"); theQuery += appendIntervalConstraint(coord.exptime, "t_exptime"); theQuery += appendIntervalConstraint(coord.timeres, "t_resolution"); theQuery += appendIntervalConstraint(qArgs.fov, "s_fov"); theQuery += appendIntervalConstraint(qArgs.spatres, "s_resolution"); theQuery += appendIntervalConstraint(qArgs.specrp, "em_res_power"); theQuery += appendIntervalConstraint(qArgs.exptime, "t_exptime"); theQuery += appendIntervalConstraint(qArgs.timeres, "t_resolution"); theQuery += appendStringMatchConstraint(coord.id, "obs_publisher_did"); theQuery += appendStringMatchConstraint(coord.facility, "facility_name"); theQuery += appendStringMatchConstraint(coord.instrument, "instrument_name"); theQuery += appendStringMatchConstraint(coord.dptype, "dataproduct_type"); theQuery += appendStringMatchConstraint(qArgs.id, "obs_publisher_did"); theQuery += appendStringMatchConstraint(qArgs.facility, "facility_name"); theQuery += appendStringMatchConstraint(qArgs.instrument, "instrument_name"); theQuery += appendStringMatchConstraint(qArgs.dptype, "dataproduct_type"); theQuery += appendStringMatchConstraint(coord.target, "target_name"); theQuery += appendStringMatchConstraint(coord.format, "access_format"); theQuery += appendStringMatchConstraint(qArgs.target, "target_name"); theQuery += appendStringMatchConstraint(qArgs.format, "access_format"); if(coord.calib != null) theQuery += " AND (" + coord.calib + " = calib_level)"; if(qArgs.calib != null) theQuery += " AND (" + qArgs.calib + " = calib_level)"; if(coord.maxrec != null) theQuery += " LIMIT " + coord.maxrec; if(qArgs.maxrec != null) theQuery += " LIMIT " + qArgs.maxrec; //theQuery += " ORDER BY obs_collection"; Loading Loading @@ -325,7 +325,7 @@ public class DbPSearch { if(band.system == Band.System.VELO_LSRK) { // FIXME assert coord: vel_min <= vel_max // FIXME assert qArgs: vel_min <= vel_max // FIXME assert cube: v_min <= v_max boolean dbInInp = (band.getMin() <= v_min) && (v_min <= band.getMax()) Loading Loading @@ -460,7 +460,7 @@ public class DbPSearch break; default: throw new IllegalArgumentException("Coord::shape was: " + pos.shape.toString() throw new IllegalArgumentException("Pos::shape was: " + pos.shape.toString() + " but valid is CIRCLE or RANGE or POLYGON"); } Loading
data-discovery/src/main/java/common/Coord.java→data-discovery/src/main/java/search/QueryArgs.java +1 −1 Original line number Diff line number Diff line import vo.parameter.*; class Coord class QueryArgs { Pos pos; Band band; Loading
data-discovery/src/main/java/webapi/SearchServlet.java +24 −24 Original line number Diff line number Diff line Loading @@ -44,37 +44,37 @@ public class SearchServlet extends javax.servlet.http.HttpServlet { Map<String, String[]> params = request.getParameterMap(); 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); QueryArgs qArgs = new QueryArgs(); qArgs.pos = Pos.parsePos(params, DEFAULT_SKY_SYSTEM); qArgs.band = Band.parseBand(params, DEFAULT_SPEC_SYSTEM); qArgs.time = Time.parseTime(params, DEFAULT_TIME_SYSTEM); qArgs.pol = Pol.parsePol(params); coord.fov = Interval.parseInterval(params, "FOV"); coord.spatres = Interval.parseInterval(params, "SPATRES"); coord.specrp = Interval.parseInterval(params, "SPECRP"); coord.exptime = Interval.parseInterval(params, "EXPTIME"); coord.timeres = Interval.parseInterval(params, "TIMERES"); qArgs.fov = Interval.parseInterval(params, "FOV"); qArgs.spatres = Interval.parseInterval(params, "SPATRES"); qArgs.specrp = Interval.parseInterval(params, "SPECRP"); qArgs.exptime = Interval.parseInterval(params, "EXPTIME"); qArgs.timeres = Interval.parseInterval(params, "TIMERES"); coord.id = SingleStringParam.parseSingleStringParam(params, "ID"); qArgs.id = SingleStringParam.parseSingleStringParam(params, "ID"); coord.collection = SingleStringParam.parseSingleStringParam(params, "COLLECTION"); coord.facility = SingleStringParam.parseSingleStringParam(params, "FACILITY"); coord.instrument = SingleStringParam.parseSingleStringParam(params, "INSTRUMENT"); coord.dptype = SingleStringParam.parseSingleStringParam(params, "DPTYPE"); qArgs.collection = SingleStringParam.parseSingleStringParam(params, "COLLECTION"); qArgs.facility = SingleStringParam.parseSingleStringParam(params, "FACILITY"); qArgs.instrument = SingleStringParam.parseSingleStringParam(params, "INSTRUMENT"); qArgs.dptype = SingleStringParam.parseSingleStringParam(params, "DPTYPE"); coord.target = SingleStringParam.parseSingleStringParam(params, "TARGET"); coord.format = SingleStringParam.parseSingleStringParam(params, "FORMAT"); qArgs.target = SingleStringParam.parseSingleStringParam(params, "TARGET"); qArgs.format = SingleStringParam.parseSingleStringParam(params, "FORMAT"); String str = SingleStringParam.parseSingleStringParam(params, "CALIB"); coord.calib = (str == null) ? null : Integer.parseInt(str); if((coord.calib != null) && ((coord.calib < 0) || (coord.calib > 4))) throw new IllegalArgumentException("CALIB out of range: " + coord.calib + " but allowed is 0..4"); qArgs.calib = (str == null) ? null : Integer.parseInt(str); if((qArgs.calib != null) && ((qArgs.calib < 0) || (qArgs.calib > 4))) throw new IllegalArgumentException("CALIB out of range: " + qArgs.calib + " but allowed is 0..4"); str = SingleStringParam.parseSingleStringParam(params, "MAXREC"); coord.maxrec = (str == null) ? null : Integer.parseInt(str); if((coord.maxrec != null) && (coord.maxrec < 0)) throw new IllegalArgumentException("MAXREC must not be negative: " + coord.maxrec); qArgs.maxrec = (str == null) ? null : Integer.parseInt(str); if((qArgs.maxrec != null) && (qArgs.maxrec < 0)) throw new IllegalArgumentException("MAXREC must not be negative: " + qArgs.maxrec); /* query Obscore table */ Loading @@ -83,7 +83,7 @@ public class SearchServlet extends javax.servlet.http.HttpServlet { dbps = new DbPSearch(settings.dbConn); } String[] pubdidArr = dbps.queryOverlapingPubdid(coord); String[] pubdidArr = dbps.queryOverlapingPubdid(qArgs); LOGGER.info("Found " + pubdidArr.length + " records"); Loading