Ignore:
Timestamp:
Apr 6, 2011, 5:24:14 PM (9 years ago)
Author:
robert@…
Message:

Implemented searching for 'any field' in advanced query

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/groovy/dbnp/query/Search.groovy

    r1596 r1717  
    303303                        case TemplateFieldType.DATE:
    304304                                try {
    305                                         return new SimpleDateFormat( "yyyy-MM-dd" ).parse( value )
     305                                        return new SimpleDateFormat( "yyyy-MM-dd" ).parse( value.toString() )
    306306                                } catch( Exception e ) {
    307307                                        return value.toString();
     
    580580                        // JSON object
    581581                        def token = entity.giveUUID()
    582                         if( !json[ token ] || json[ token ][ criterion.field ] == null )
    583                                 return false;
    584 
    585                         // Check whether a list or string is given
    586                         def value = json[ token ][ criterion.field ];
    587 
    588                         // Save the value of this entity for later use
    589                         saveResultField( entity.id, criterion.entity + " " + criterion.field, value )
    590 
    591                         if( !( value instanceof Collection ) ) {
    592                                 value = [ value ];
     582                        def value
     583                       
     584                        if( criterion.field == '*' ) {
     585                                // Collect the values from all fields
     586                                value = [];
     587                                json[ token ].each { field ->
     588                                        if( field.value instanceof Collection ) {
     589                                                field.value.each { value << it }
     590                                        } else {
     591                                                value << field.value;
     592                                        }
     593                                }
     594                        } else {
     595                                if( !json[ token ] || json[ token ][ criterion.field ] == null )
     596                                        return false;
     597       
     598                                // Check whether a list or string is given
     599                                value = json[ token ][ criterion.field ];
     600       
     601                                // Save the value of this entity for later use
     602                                saveResultField( entity.id, criterion.entity + " " + criterion.field, value )
     603       
     604                                if( !( value instanceof Collection ) ) {
     605                                        value = [ value ];
     606                                }
    593607                        }
    594608
     
    626640                def callUrl = 'entity=' + this.entity
    627641                tokens.sort().each { callUrl += "&tokens=" + it.encodeAsURL() }
    628                 fields.sort().each { callUrl += "&fields=" + it.encodeAsURL() }
     642               
     643                // If all fields are searched, all fields should be retrieved
     644                if( fields.contains( '*' ) ) {
     645                       
     646                } else {
     647                        fields.sort().each { callUrl += "&fields=" + it.encodeAsURL() }
     648                }
    629649
    630650                return callUrl;
     
    647667
    648668                criteria.each { criterion ->
    649                         if( criterion.field ) {
     669                        if( criterion.field && criterion.field != '*' ) {
    650670                                def valueCallback = valueCallback( criterion.entity );
    651671                               
     
    672692                for( criterion in criteria ) {
    673693                        for( entity in entities ) {
    674                                 if( criterion.field )
     694                                if( criterion.field && criterion.field != '*' )
    675695                                        saveResultField( entity.id, criterion.entity + ' ' + criterion.field, valueCallback( entity, criterion ) )
    676696                        }
     
    692712                if( value == null )
    693713                        value = "";
    694 
     714               
     715                if( fieldName == "*" )
     716                        return;
     717                       
    695718                if( value instanceof Collection ) {
    696719                        value = value.findAll { it != null }
    697720                }
    698 
     721               
    699722                resultFields[ id ][ fieldName ] = value;
    700723        }
Note: See TracChangeset for help on using the changeset viewer.