public static Query fromQueryParams()

in stack/core/src/main/java/org/apache/usergrid/persistence/Query.java [200:315]


    public static Query fromQueryParams( Map<String, List<String>> params )
            throws QueryParseException {
        Query q = null;
        CounterResolution resolution = null;
        List<Identifier> identifiers = null;
        List<CounterFilterPredicate> counterFilters = null;

        String ql = QueryUtils.queryStrFrom( params );
        String type = ListUtils.first( params.get( "type" ) );
        Boolean reversed = ListUtils.firstBoolean( params.get( "reversed" ) );
        String connection = ListUtils.first( params.get( "connectionType" ) );
        UUID start = ListUtils.firstUuid( params.get( "start" ) );
        String cursor = ListUtils.first( params.get( "cursor" ) );
        Integer limit = ListUtils.firstInteger( params.get( "limit" ) );
        List<String> permissions = params.get( "permission" );
        Long startTime = ListUtils.firstLong( params.get( "start_time" ) );
        Long finishTime = ListUtils.firstLong( params.get( "end_time" ) );

        List<String> l = params.get( "resolution" );
        if ( !ListUtils.isEmpty( l ) ) {
            resolution = CounterResolution.fromString( l.get( 0 ) );
        }

        l = params.get( "counter" );

        if ( !ListUtils.isEmpty( l ) ) {
            counterFilters = CounterFilterPredicate.fromList( l );
        }

        Boolean pad = ListUtils.firstBoolean( params.get( "pad" ) );

        for ( Entry<String, List<String>> param : params.entrySet() ) {
            Identifier identifier = Identifier.from( param.getKey() );
            if ( ( param.getValue() == null ) || ( param.getValue().size() == 0 ) || identifier.isUUID() ) {
                if ( identifier != null ) {
                    if ( identifiers == null ) {
                        identifiers = new ArrayList<Identifier>();
                    }
                    identifiers.add( identifier );
                }
            }
        }

        if ( ql != null ) {
            ql = ql.replace("+", "%2b"); // ql string supports literal + symbol, encode so it will decode correctly later
            q = Query.fromQL( decode( ql ) );
        }


        if ( type != null ) {
            q = newQueryIfNull( q );
            q.setEntityType( type );
        }

        if ( connection != null ) {
            q = newQueryIfNull( q );
            q.setConnectionType( connection );
        }

        if ( permissions != null ) {
            q = newQueryIfNull( q );
            q.setPermissions( permissions );
        }

        if ( start != null ) {
            q = newQueryIfNull( q );
            q.setStartResult( start );
        }

        if ( cursor != null ) {
            q = newQueryIfNull( q );
            q.setCursor( cursor );
        }

        if ( limit != null ) {
            q = newQueryIfNull( q );
            q.setLimit( limit );
        }

        if ( startTime != null ) {
            q = newQueryIfNull( q );
            q.setStartTime( startTime );
        }

        if ( finishTime != null ) {
            q = newQueryIfNull( q );
            q.setFinishTime( finishTime );
        }

        if ( resolution != null ) {
            q = newQueryIfNull( q );
            q.setResolution( resolution );
        }

        if ( counterFilters != null ) {
            q = newQueryIfNull( q );
            q.setCounterFilters( counterFilters );
        }

        if ( pad != null ) {
            q = newQueryIfNull( q );
            q.setPad( pad );
        }

        if ( identifiers != null ) {
            q = newQueryIfNull( q );
            q.setIdentifiers( identifiers );
        }

        if ( reversed != null ) {
            q = newQueryIfNull( q );
            q.setReversed( reversed );
        }

        return q;
    }