Ignore:
Timestamp:
09/09/08 16:07:40 (11 years ago)
Author:
cbyrom
Message:

Add support for the WSDL 'orderBy' keywords - 'date' and 'dataCentre'

  • NB, the former sorts on the start date whereas the latter is a

fudge and sorts on the discovery id. The original datacentre orderBy
was not properly implemented - and its implementation details are
still uncertain, hence the temporary fudge.

Location:
TI01-discovery/branches/ws-Discovery2-upgrade/src/ndg/services/discovery
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/branches/ws-Discovery2-upgrade/src/ndg/services/discovery/DBProperties.java

    r4179 r4186  
    2828        public static final String OFFSET_STATEMENT = " OFFSET "; 
    2929        public static final String ORDERBY_STATEMENT = " ORDER BY "; 
     30 
     31        public static final String START_TIME = "start_time"; 
     32 
     33        public static final String DISCOVERY_ID = "discovery_id"; 
    3034 
    3135 
  • TI01-discovery/branches/ws-Discovery2-upgrade/src/ndg/services/discovery/DiscoveryServiceSkeleton.java

    r4170 r4186  
    4949        public static final String INVALID_LIST_NAME_MESSAGE =  
    5050                "Invalid list name: please use getListNames to get the valid list names"; 
     51 
     52        public static final String DATE_ORDER = "date"; 
     53 
     54        public static final String DATACENTRE_ORDER = "dataCentre"; 
    5155         
    5256        /** 
     
    382386                else if ( requestContent.getListName().equals("orderByFieldList") ) 
    383387                { 
    384                         list.addListMember("date"); 
    385                         list.addListMember("dataCentre"); 
     388                        list.addListMember(DATE_ORDER); 
     389                        list.addListMember(DATACENTRE_ORDER); 
    386390                } 
    387391                else if ( requestContent.getListName().equals("scopeList") ) 
  • TI01-discovery/branches/ws-Discovery2-upgrade/src/ndg/services/discovery/SearchAgent.java

    r4142 r4186  
    446446                } 
    447447 
    448                 if (isTemporalSearch()) 
     448                if (isTemporalSearch() || isOrderedByDate()) 
    449449                { 
    450450                        logger.info("Adding temporal data to query"); 
    451451                        fromSqlCmd.append(", " + DBProperties.TEMPORAL_DATA_TABLE); 
    452                         appendWhereClause(whereSqlCmd, " (" + DBProperties.TEMPORAL_DATA_TABLE + ".start_time, " + 
    453                                         DBProperties.TEMPORAL_DATA_TABLE + ".end_time) OVERLAPS (DATE '" +  
    454                                 this.sdf.format(this.getDateRangeStart().getTime()) +  
    455                                 "', DATE '" + this.sdf.format(this.getDateRangeEnd().getTime() ) + "') AND " + 
    456                                 DBProperties.TEMPORAL_DATA_TABLE + ".temporal_data_id = " + 
     452                        if (isTemporalSearch()) 
     453                        { 
     454                                appendWhereClause(whereSqlCmd, " (" + DBProperties.TEMPORAL_DATA_TABLE + ".start_time, " + 
     455                                                DBProperties.TEMPORAL_DATA_TABLE + ".end_time) OVERLAPS (DATE '" +  
     456                                        this.sdf.format(this.getDateRangeStart().getTime()) +  
     457                                        "', DATE '" + this.sdf.format(this.getDateRangeEnd().getTime() ) + "')"); 
     458                                 
     459                        } 
     460                        appendWhereClause(whereSqlCmd, DBProperties.TEMPORAL_DATA_TABLE + ".temporal_data_id = " + 
    457461                                DBProperties.SPATIAL_TEMPORAL_DATA_TABLE + ".temporal_data_id"); 
    458462                } 
    459463                 
    460464                // if either or both spatial and temporal data is searched on, need to join this with the main 
    461                 // orig doc search query 
    462                 if (isTemporalSearch() || isSpatialSearch()) 
     465                // orig doc search query - NB, also need for date ordering 
     466                if (isTemporalSearch() || isSpatialSearch() || isOrderedByDate()) 
    463467                { 
    464468                        fromSqlCmd.append(", " + DBProperties.SPATIAL_TEMPORAL_DATA_TABLE); 
     
    476480                { 
    477481                        logger.info("- adding specified order by parameter"); 
     482                        if (isOrderedByDate()) 
     483                        { 
     484                                logger.info("NB, refine date ordering: order by 'start_time'"); 
     485                                this.setOrderByField(DBProperties.START_TIME); 
     486                        } 
     487                        else if (this.getOrderByField().equals(DiscoveryServiceSkeleton.DATACENTRE_ORDER)) 
     488                        { 
     489                                //TODO: need to decide what this order by should actually be done on 
     490                                // - i.e. on full name of org or just the ID - until this is done, just 
     491                                // use the slight fudge here - otherwise will need to add an appropriate 
     492                                // additional column in the DB to store this info 
     493                                logger.info("NB, fudging datacentre order - order by discovery ID"); 
     494                                this.setOrderByField(DBProperties.DISCOVERY_ID); 
     495                        } 
    478496                        whereSqlCmd.append(DBProperties.ORDERBY_STATEMENT + this.getOrderByField() + " " + this.getOrderByDirection()); 
    479497                } 
     
    511529 
    512530        /** 
     531         * Determine whether the search is to be ordered by date 
     532         *  
     533         * @return true, if search to be order by date, false otherwise 
     534         */ 
     535        private boolean isOrderedByDate()  
     536        { 
     537                logger.info("Checking if we're ordering by date" + this.getOrderByField()); 
     538                if (this.getOrderByField() != null && 
     539                                this.getOrderByField().equals(DiscoveryServiceSkeleton.DATE_ORDER)) 
     540                { 
     541                        logger.info("- yes we are"); 
     542                        return true; 
     543                } 
     544                else 
     545                { 
     546                        logger.info(" - no we are not"); 
     547                        return false; 
     548                } 
     549        } 
     550 
     551        /** 
    513552         * Determine whether the search has any temporal data specified 
    514553         *  
     
    521560                if (this.getDateRangeStart() != null && this.getDateRangeEnd() != null) 
    522561                { 
    523                         if (dateRangeEnd.getTimeInMillis() > dateRangeStart.getTimeInMillis()) 
     562                        if (dateRangeEnd.getTimeInMillis() >= dateRangeStart.getTimeInMillis()) 
    524563                        { 
    525564                                logger.info("Valid temporal data specified"); 
Note: See TracChangeset for help on using the changeset viewer.