This sounds like a good idea. I've been thinking about various ways to 
implement this as well. I think I agree with most of this. I think that if 
we made the DataSet object implement the Iterator interface, we could 
encapsulate all the database paging/sorting code in that object, and the 
TableTag still just treats it as an Iterator, which would mean very 
minimal changes to the existing code.

The only problem I see with this approach is that the implementation will 
be tied to the database you are using. Each database may handle 
paging/sorting differently, so that will need to be taken into account. 
Maybe what you end up doing is creating a set of DatabaseDriver classes, 
that could control any of the per-database oddities. You could try 
sticking to the SQL spec, but there will always be more efficient ways to 
perform these operations with database-specific addons.

I'd still like to split out the different functionalites of this tag into 
at least 3 or 4 groups:

1. displaying data
2. paging data
3. sorting data
4. decorating data

If we could do this, then each piece could be extended for user-specific 
things, and we could provide all the common things with the binary 
distribution.

Just my $.02 as always...

John


On Fri, 16 Apr 2004, Alex Burgel wrote:

> ok, i see.
> 
> this design makes it almost impossible to handle large data sets. especially
> things coming out of a database. i've been thinking about some ideas to get
> around this. i'll just throw them out here to get some comments. my
> apologies if these have been brought up before, i'm new to the list.
> 
> the trouble with dealing with large datasets is that many of the features
> that the tag provides are more efficiently handled outside. like sorting and
> paging are better handled inside a database. but thats only for things that
> comes from a database, for everything else, its useful that the tag does it
> for you. so any solution would mean that you have to support both ways,
> having the db do these things and having the tag do it.
> 
> the idea is to factor out all the handling of the data into a separate
> interface, maybe called DataSet. users could provide different
> implementations of the interface that could interact with their database to
> do the sorting, paging, etc.
> 
> the TableTag would be modified to accept either a list or an object
> implementing the above interface. if it gets a list, then the TableTag would
> use a default implemenation of the interface, otherwise it would just use
> the object. you would move all the TableModel stuff inside the default
> implementation.
> 
> so the TableTag methods would look something like this:
> 
> doStartTag() {
> 
>       Object data = ... get from jsp tag attribute 'name'
>       dataSet = null;
> 
>       if (data instanceof DataSet)
>               dataSet = data
>       else if (data instanceof List)
>               dataSet = new DataSetListImpl(list)
> 
>       dataSet.setSort(sort)
>       dataSet.setPage(page)
>       dataSet.setPageSize(pagesize)
> 
>       return doIteration();
> }
> 
> doIteration() {
>       # very similar to current impl
>       # except it gets the next object from the dataSet
>       # but all the TableModel stuff is internal to DataSet
> 
>       # the dataSet can choose to have all the rows iterated over
>       # or it can have only the ones that i knows will be displayed
>       # since it already knows the paging information
> }
> 
> doEndTag() {
>       out.print(dataSet.getHtmlData())
> 
>       # or export it in another format
> }
> 
> since dataSet already knows what the page size and sorting, etc. is, it
> knows which html data to display.
> 
> i'm sure there are tons of things that i've missed. but my point is to move
> a lot of these things to a user provided object so people with larger
> datasets can do optimizations, while providing a default implementation for
> people who just have a simple list.
> 
> 
> btw, i'm happy to implement this, if people think it would be of some use.
> 
> --alex
> 
> > Date: Thu, 15 Apr 2004 12:50:26 -0400 (EDT)
> > From: John York <[EMAIL PROTECTED]>
> > To: "[EMAIL PROTECTED]"
> > <[EMAIL PROTECTED]>
> > Subject: Re: [displaytag-devel] why iterator over undisplayed rows?
> > Reply-To: [EMAIL PROTECTED]
> >
> > sorting. You need to look at all the data otherwise you can't sort the
> > data or provide the sorting links in the table headers.
> >
> > We run into the problem all the time at my company, because we'd really
> > like a more efficient way to handle large sets of data. It may be
> > possible
> > to optimize the tag when sorting isn't used, Fabrizio, do you have any
> > idea if that would work?
> >
> >
> > On Thu, 15 Apr 2004, Alex Burgel wrote:
> >
> > > hi,
> > >
> > > i've been playing around with displaytag, trying to get it to
> > work with my
> > > set up. i have a question about its design.
> > >
> > > in TableTag, it seems to iterate over all the items in the list
> > to populate
> > > the TableModel. once its populated, in doEndTag() it finds out
> > which ones
> > > are being displayed and then writes them out.
> > >
> > > it seems a bit unnecessary to do all this extra processing for
> > the rows that
> > > won't be displayed, especially since at the point of doStartTag
> > you already
> > > know which rows will be displayed because you know the page
> > size and which
> > > page you're on.
> > >
> > > is there a reason for this that i'm not seeing?
> > >
> > > the reason i ask is because i'm trying to come up with a way to
> > allow the
> > > tag to accept partial lists but still provide all the features
> > like paging,
> > > etc.
> > >
> > > thanks.
> > >
> > > --alex
> > >
> > >
> > >
> > >
> > > -------------------------------------------------------
> > > This SF.Net email is sponsored by: IBM Linux Tutorials
> > > Free Linux tutorial presented by Daniel Robbins, President and CEO of
> > > GenToo technologies. Learn everything from fundamentals to system
> > > administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
> > > _______________________________________________
> > > displaytag-devel mailing list
> > > [EMAIL PROTECTED]
> > > https://lists.sourceforge.net/lists/listinfo/displaytag-devel
> > >
> >
> > --
> > John York
> > Software Engineer
> > CareerSite Corporation
> >
> 
> 
> 
> 
> -------------------------------------------------------
> This SF.Net email is sponsored by: IBM Linux Tutorials
> Free Linux tutorial presented by Daniel Robbins, President and CEO of
> GenToo technologies. Learn everything from fundamentals to system
> administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
> _______________________________________________
> displaytag-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/displaytag-devel
> 

-- 
John York
Software Engineer
CareerSite Corporation



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
displaytag-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/displaytag-devel

Reply via email to