Changeset 5566


Ignore:
Timestamp:
06/08/09 09:07:30 (10 years ago)
Author:
sdonegan
Message:

Updated to handle proximity ordering on non-spatial searches originating from the DDS frontend

Location:
TI01-discovery/branches/ws-Discovery2-MSI/discoveryUpgrade/src/ndg/services/discovery
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/branches/ws-Discovery2-MSI/discoveryUpgrade/src/ndg/services/discovery/DiscoveryServiceSkeleton.java

    r5561 r5566  
    252252 
    253253                if (requestContent.isSetOrderBy()) { 
     254                         
     255                         
     256                         
    254257                        logger.info("Results ordered by: " + requestContent.getOrderBy()); 
    255258                         
    256259                        //if ordering by proximity and no spatial data input, then must "convert" to spatial search 
     260                        //NOTE - In the case of the DDS front end, all searches are considered a spatial search so must look after that elsewhere 
     261                         
    257262                        //at this stage must work out whether a true spatial search or not before SearchAgent and isSpatialSearch method is available                    
    258                         if  ((requestContent.getOrderBy().equals(PROXIMITY_ORDER)) && (!(requestContent.isSetBoundingBox()))) { 
     263                        if  ((requestContent.getOrderBy().equals(PROXIMITY_ORDER)) && (!isDummySpatialSearch(requestContent.getBoundingBox().getLimitEast(),requestContent.getBoundingBox().getLimitWest(),requestContent.getBoundingBox().getLimitNorth(), requestContent.getBoundingBox().getLimitSouth()))) { 
    259264                                 
    260265                                logger.info("Adding global bounding box data to AID proximity ordering where no spatial data input"); 
     
    331336        public discoveryserviceapi.DoPresentReturnDocument doPresent(discoveryserviceapi.DoPresentDocument request) throws DiscoveryWSException { 
    332337                logger.info(DELIMITER); 
    333                 logger.info("doPresent() invoked SJD"); 
     338                logger.info("doPresent() invoked"); 
    334339                logger.info(DELIMITER); 
    335340 
     
    523528        } 
    524529         
     530         
     531        /** 
     532         * Fudge based on isSpatialSearch method from SearchAgent - need a get around as new front end seems to have garbled things TODO: ungarble front end. 
     533         *  
     534         * @return true if includes spatial search, false otherwise 
     535         */ 
     536        private boolean isDummySpatialSearch(BigDecimal east, BigDecimal west, BigDecimal north, BigDecimal south) { 
     537                logger.info("Checking if valid spatial data specified"); 
     538                //TODO - new MSI front end fudges the bbox so default limits are not returned even if map not set 
     539                //Fudge this for now! 
     540                 
     541                if (east.intValue() >= 179 && west.intValue() <= -179 && north.intValue() >= 89 && south.intValue() <= -89) { 
     542                                logger.info("Looks like no spatial search info was actually input (fudgewatch)"); 
     543                                return false; 
     544                        } 
     545                        logger.info("Valid spatial data specified"); 
     546                        return true; 
     547                 
     548        } 
     549         
    525550        /** 
    526551         * Prepare an INSERT sql statement taking variables from available discoveryserviceapi.SearchType 
  • TI01-discovery/branches/ws-Discovery2-MSI/discoveryUpgrade/src/ndg/services/discovery/SearchAgent.java

    r5561 r5566  
    483483 
    484484                String termColumn = null; 
     485                         
    485486                 
    486487                if (Utilities.isStringDefined(this.getTerm())) { 
     
    544545                 
    545546                 
    546                  
    547                 if (isSpatialSearch()) { 
     547                //Must catch whether ordering by proximity here, and no spatial search specified on DDS front end. 
     548                //||             
     549                //(  (!isSpatialSearch()) && (this.getOrderByField().equals(DiscoveryServiceSkeleton.PROXIMITY_ORDER)))  
     550                if (isSpatialSearch(this.getOrderByField().equals(DiscoveryServiceSkeleton.PROXIMITY_ORDER))){ 
    548551                         
    549552                        logger.info("Adding spatial data to query"); 
     
    625628                // join this with the main 
    626629                // orig doc search query - NB, also need for date ordering 
    627                 if (isTemporalSearch() || isSpatialSearch()) { 
     630                if (isTemporalSearch() || isSpatialSearch(this.getOrderByField().equals(DiscoveryServiceSkeleton.PROXIMITY_ORDER))) { 
    628631                        fromSqlCmd.append(", " + DBProperties.SPATIAL_TEMPORAL_DATA_TABLE); 
    629632                        whereSqlCmd.append(" AND " 
     
    874877         * @return true if includes spatial search, false otherwise 
    875878         */ 
    876         private boolean isSpatialSearch() { 
     879        private boolean isSpatialSearch(boolean spatialOrdering) { 
    877880                logger.info("Checking if valid spatial data specified"); 
     881                 
    878882                //TODO - new MSI front end fudges the bbox so default limits are not returned even if map not set 
    879883                //Fudge this for now! 
    880                 if (this.getLimitEast() != null && this.getLimitWest() != null 
    881                                 && this.getLimitNorth() != null && this.getLimitSouth() != null) { 
    882                         if (this.getLimitEast().intValue() >= 179  
     884                if (!spatialOrdering){ 
     885                         
     886                        if (this.getLimitEast() != null && this.getLimitWest() != null 
     887                                        && this.getLimitNorth() != null && this.getLimitSouth() != null) { 
     888                                if (this.getLimitEast().intValue() >= 179  
    883889                                        && this.getLimitWest().intValue() <= -179 
    884890                                        && this.getLimitNorth().intValue() >= 89 
    885891                                        && this.getLimitSouth().intValue() <= -89) { 
    886                                 logger.info("Spatial data is equivalent to global search - will ignore in search"); 
    887                                 return false; 
    888                         } 
    889                         logger.info("Valid spatial data specified"); 
    890                         return true; 
    891                 } 
     892                                        logger.info("Spatial data is equivalent to global search - will ignore in search"); 
     893                                        return false; 
     894                                } 
     895                                logger.info("Valid spatial data specified"); 
     896                                return true; 
     897                        } 
     898                 
    892899                logger.info("No valid spatial data specified"); 
    893900                return false; 
     901                } else { 
     902                        //if spatial ordering, and got this far return true              
     903                        return true; 
     904                } 
    894905        } 
    895906 
Note: See TracChangeset for help on using the changeset viewer.