[aerogear-dev] Client Paging Strawman

Matthias Wessendorf matzew at apache.org
Tue Jan 15 04:24:10 EST 2013


On Mon, Jan 14, 2013 at 8:29 PM, Summers Pittman <supittma at redhat.com>wrote:

>  On 01/14/2013 02:27 PM, Kris Borchers wrote:
>
>
>  On Jan 14, 2013, at 1:17 PM, Summers Pittman <supittma at redhat.com> wrote:
>
>  On 01/14/2013 01:00 PM, Kris Borchers wrote:
>
> OK folks, below is the contents of this gist
> https://gist.github.com/4531575. I may have missed a number of things,
> gotten too specific in places or not specific enough in others. This should
> hopefully get a good discussion going on how we want to handle paging
> across all of the client libraries. Let's keep all comments on the list and
> not the gist as much as possible to avoid breaking up the conversation.
>
>  Below is a pipe configuration showing the different paging options.
> Defaults are just suggestions and are up for discussion as much as the rest
> of it
>
>      var pagedPipe = AeroGear.Pipeline({
>         name: "pager",
>         settings: {
>             paged: {String}, // Default is "headers", can also be
> "content", or undefined for no paging
>             pageConfig: { // Only required if paged is not undefined
>                 // which page, header default is "AG-Paging-Offset",
> content default is "paging.offset"
>                 offset: {String},
>                 offsetVal: {Number}, // Default 0 for first page
>
>                 // items per page, header default is "AG-Paging-Limit",
> content default is "paging.limit"
>                 limit: {String},
>                 limitVal: {Number}, // Default 5 items per page
>
>                 // total number of items, header default is
> "AG-Paging-Total", content default is "paging.total"
>                 total: {String},
>
>                 // link to next page, default in both cases is undefined
>                 next: {String},
>
>                 // link to previous page, default in both cases is
> undefined
>                 prev: {String}
>             }
>         }
>     }).pipes.pager;
>
>  Getter/Setter methods should be provided for getting and updating the
> offsetVal and limitVal defaults
>
>      var defaultOffset = pagedPipe.getOffsetVal();
>     pagedPipe.setOffsetVal( defaultOffset + 1 ); // by default the second
> page would be returned
>
>     var defaultLimit = pagedPipe.getLimitVal();
>     pagedPipe.setLimitVal( defaultLimit + 5 ); // by default, 10 items
> would be returned per page
>
>  ## read()
> By default, a read() against a paged pipe will return the first page based
> on the default offsetVal and limitVal. We could possible add an option that
> doesn't effect unpaged pipes but on a paged pipe, it can be used to turn
> off paging for that read() and get all data
>
>      // Get first page
>     pagedPipe.read({success callback handles data});
>
>     // Get all data from paged pipe
>     pagedPipe.read({
>         page: false,
>         success: handle the data
>     });
>
> To avoid code duplication, **next**, **prev**, **first** and **last**
> pages can be retrieved by passing an option to the read method of a paged
> pipe since other than some paging housekeeping, the code would be the same.
> We can also use that same option as above that was used to get all data
> from a paged pipe. One question, when requesting prev from first page or
> next from last page, should it throw an error that needs to be handled or
> just return and empty data set? I see advantages and disadvantages of both.
>
>      // Get next page
>     pagedPipe.read({
>         page: "next",
>         success: handle the data
>     });
>
>     // Get previous page
>     pagedPipe.read({
>         page: "prev",
>         success: handle the data
>     });
>
>     // Get first page
>     pagedPipe.read({
>         page: "first",
>         success: handle the data
>     });
>
>     // Get last page
>     pagedPipe.read({
>         page: "last",
>         success: handle the data
>     });
>
>
> _______________________________________________
> aerogear-dev mailing listaerogear-dev at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/aerogear-dev
>
>  At first glance I don't like having the distinction between a "Pipe" and
> a "PagedPipe".  In Java land PagedPipe will be an interface which extends
> Pipe (this is no big deal) and PagedRestAdatper would extend RestAdapted
> and implement PagedPipe.  This isn't too bad but it makes reusing paging
> logic a bit harder.  (And also this is at first glance).
>
> The biggest issue I see with a PagedPipe is it means a developer can't
> change his paging preferences without creating a new Pipe.
>
>
>  If I add a setter for "paged" that would effectively fix that on the JS
> side since offset and limit are already updatable. Does that work for you?
>
> No because I think fundamentally paging is part of the query and not part
> of the pipe.
>


+1


>
>
>  _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev
>
>
>
>
> _______________________________________________
> aerogear-dev mailing listaerogear-dev at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/aerogear-dev
>
>
>
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev
>
>


-- 
Matthias Wessendorf

blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
twitter: http://twitter.com/mwessendorf
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/aerogear-dev/attachments/20130115/c2e10a5d/attachment.html 


More information about the aerogear-dev mailing list