/** * Created by IntelliJ IDEA. * User: sbortman * Date: Jun 12, 2008 * Time: 1:48:33 PM * To change this template use File | Settings | File Templates. */ import java.text.SimpleDateFormat; import org.hibernate.criterion.Restrictions import org.hibernate.criterion.Criterion class RasterEntryQuery { String aoiMaxLat String aoiMinLon String aoiMinLat String aoiMaxLon Date startDate Date endDate String centerLon String centerLat String viewMaxLat String viewMinLon String viewMinLat String viewMaxLon String radiusact String bboxact String aoiRadius SearchTag searchTag1 SearchTag searchTag2 SearchTag searchTag3 SearchTag searchTag4 SearchTag searchTag5 SearchTag searchTag6 SearchTag searchTag7 SearchTag searchTag8 String searchTagValue1 String searchTagValue2 String searchTagValue3 String searchTagValue4 String searchTagValue5 String searchTagValue6 String searchTagValue7 String searchTagValue8 def createClause() { IntersectsExpression intersects = createIntersection() Criterion range = createDateRange() def clause = null if ( intersects && range ) { clause = Restrictions.and(intersects, range) } else { if ( intersects ) { clause = intersects } else if ( range ) { clause = range } } return clause } private Criterion createDateRange() { def range = null // Change the time portion of the end date // to be the end of the day. 23:59:59.999 if ( endDate ) { def cal = Calendar.instance cal.time = endDate cal.set(Calendar.HOUR, 23) cal.set(Calendar.MINUTE, 59) cal.set(Calendar.SECOND, 59) cal.set(Calendar.MILLISECOND, 999) endDate = cal.time } if ( startDate && endDate ) { range = Restrictions.between("acquisitionDate", startDate, endDate) } else { if ( startDate ) { range = Restrictions.ge("acquisitionDate", startDate) } else if ( endDate ) { range = Restrictions.le("acquisitionDate", endDate) } } return range } private IntersectsExpression createIntersection() { def intersects = null if ( aoiMaxLat && aoiMinLon && aoiMinLat && aoiMaxLon ) { def srs = "4326" def wkt = Geometry.createPolygon( aoiMinLon, aoiMinLat, aoiMaxLon, aoiMaxLat ) def bounds = Geometry.fromString("SRID=${srs};${wkt}") intersects = new IntersectsExpression("groundGeom", bounds) } return intersects } def toMap() { SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); String startDateText = (startDate) ? formatter.format(startDate) : ""; String endDateText = (endDate) ? formatter.format(endDate) : ""; [ aoiMaxLat: aoiMaxLat, aoiMinLon: aoiMinLon, aoiMinLat: aoiMinLat, aoiMaxLon: aoiMaxLon, startDate: startDateText, endDate: endDateText, viewMaxLat: viewMaxLat, viewMinLon: viewMinLon, viewMinLat: viewMinLat, viewMaxLon: viewMaxLon, "searchTag1.id": searchTag1?.id, searchTagValue1: searchTagValue1, "searchTag2.id": searchTag2?.id, searchTagValue2: searchTagValue2, "searchTag3.id": searchTag3?.id, searchTagValue3: searchTagValue3, "searchTag4.id": searchTag4?.id, searchTagValue4: searchTagValue4, "searchTag5.id": searchTag5?.id, searchTagValue5: searchTagValue5, "searchTag6.id": searchTag6?.id, searchTagValue6: searchTagValue6, "searchTag7.id": searchTag7?.id, searchTagValue7: searchTagValue7, "searchTag8.id": searchTag8?.id, searchTagValue8: searchTagValue8 ] } def toMap2() { def map = toMap() map?.each {k, v -> if ( !v ) { map[k] = "" } } return map } }