diff --git a/data-discovery/src/main/java/vlkb/search/DbPSearch.java b/data-discovery/src/main/java/vlkb/search/DbPSearch.java index 8c72fb9cb5f424e31ec1b8b0fe7ddf8c4bdf0044..ecb3c44cf1bb1568a89778e1cacdf6f7c69b5b1b 100644 --- a/data-discovery/src/main/java/vlkb/search/DbPSearch.java +++ b/data-discovery/src/main/java/vlkb/search/DbPSearch.java @@ -51,7 +51,7 @@ public class DbPSearch = "((em_min > " + Double.toString(coord.band.getMax()) + ") OR (em_max < " + Double.toString(coord.band.getMin()) + "))"; - theQuery += " AND ( (NOT " + vel_no_overlap + ") OR (em_min is null) OR (em_max is null))"; + theQuery += " AND ( (em_min is null) OR (em_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 * It is the legacy-search behaviour - however is that useful ? */ @@ -79,6 +79,20 @@ public class DbPSearch if(addSS.length() > 0) theQuery += " AND (" + addSS + ")"; } + 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 += 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(coord.target, "target_name"); + theQuery += appendStringMatchConstraint(coord.format, "access_format"); + //theQuery += " ORDER BY obs_collection"; LOGGER.info(theQuery); @@ -112,6 +126,33 @@ public class DbPSearch return pubdidArr; } + private String appendIntervalConstraint(Interval interval, String colName) + { + if(interval != null) + { + String no_overlap + = "((" + colName + " > " + Double.toString(interval.getMax()) + + ") OR (" + colName + " < " + Double.toString(interval.getMin()) + "))"; + + return " AND ( (" + colName + " is null) OR (NOT " + no_overlap + "))"; + } + else + { + return ""; + } + } + + private String appendStringMatchConstraint(String str, String colName) + { + if(str != null) + { + return " AND ( (" + colName + " is null) OR ('" + str.trim() + "' = " + colName + "))"; + } + else + { + return ""; + } + }